Vi presenterar m interprocedural flow-lnsensltlve points-to rmalysls baserat på typ ]nference metoder med en nästan hneart ime kostnads komplexitet För vår kända ~e, detta är den asymptotiskt snabbaste icke-trlwzd Interprocedural points-to analys algorlthm ännu beskrivs Al,gotnthm IS bmedona icke-standard type system. Typen Inferred för alla WMable l-epl-esents en uppsättning platser och innehåller en typ som i sin tur representerar en uppsättning ot' platser möjligen pekas på av variabeln. Den typ som härleds för en funktionsvariabel l-epresenterar en uppsättning funktioner Den kan peka på och innehålla en typsignatur för dessa funktionerResultatet ztre motsvarar resultatet av en flödesokänslig aliasanalys (och kontrollflödesanalys) som förutsätter aliasrelationer är reflexiva och transltiva. Detta arbete ger tre bidrag Det första isatype systemet för att beskriva en umversally giltig lagringsform graf för ett program i linjärt utrymme. Den andra är ett restriktionssystem som ofta leder till bettel-l-esults än det ''uppenbara'' restriktionssystemet för gyven-typsystemet Den tredje är en nästan llneal-time algolnthm för points-to analysls av solwng ett restriktionssystem De flesta aktuella kompilering-s och programmeringsverktyg använder endast intraprocedurala analyser, som polynomal tlmead rymdkomplexIty av de gemensamma data-flödesbaserade analyser pi-events användningen av interprocedurala analyser för stora program. Intel-procedural analyslsblir allt viktigare, asitlsnödvändigt för att stödja hela programoptimering och olika programförståelseverktyg. Tidigare publicerade Interprocedural analysalgoritmer har inte rapporterats ha framgångsrikt applicerats på program runt 100 000 rader av C-kod (de publicerade resultaten är praktiskt taget alla för mindre än 10 0001 ines of Ccode). Tillstånd att göra digitala/hårda kopior av hela eller delar av denna Mriterial för personligt eller calaasroom bruk ia beviljat witbout avgift förutsatt att kopiorna inte är gjorda eller distribueras för vinstdrivande eller kommersiell reklam, upphovsrättsmeddelandet, titeln på publikationen och dess datum visas, och meddelande ges att upphovsrätten är byperrnission av ACM, Inc. Vi presenterar ett flöde-okänsligt interprocedurala punkter-för att analysera algol-itm som har en önskvärd linjär utrymme och nästan linjär tid komplexitet och är också mycket snabb i praktiken. Algoritmen är lätt att tillämpa till program med många hundratusentals Ilnes av kod. Analysresultaten är ofta inte lika exakta som de som erhålls genom flödeskänsliga analyser Men resultaten är ungefär jämförbara med resultaten av, t.ex., kubiktidens komplexitetsflöde okänsliga analyser av [Wei80] Algoritmen, som är inspirerad av Hengleins blndlng tidsanalys efter typinfel-ence [Hen9 1]. använder anon-standard type system för att beskriva butikens användning vid körning genom att använda typer för att konstruera en lagringsform graf [CWZ90]. Medan vi beskriver principerna bakom algoritmen i termer av typer och skrivregler, ger vi också en detaljerad beskrivning av algoritmen som kan användas nästan direkt för att implementera olgoritmen i en kompilator I Avsnitt 2 anger vi det källspråk för vilket vi beskriver algoritmen Språket fångar de väsentliga delarna av ett språk som C. I Avsnitt 3 definierar vi den icke-standarduppsättning av typer som vi använder för att modellera lagringsanvändning, och i Avsnitt 4 anger vi en uppsättning skrivregler för program Skrivreglerna ställer krav på förhållandet mellan olika typer av programvariabler. Att hitta en typning av programmet som lyder dessa begränsningar innebär att utföra en poäng-till-analys I Avsnitt 5 visar vi hur man effektivt kan dra den minimala typning som följer begränsningarna I Avsnitt 6 rapporterar vi om praktisk erfarenhet av algoritmen i en C-programmeringsmiljö. I Avsnitt 7 beskriver vi relaterat arbete, och m SectIon 8 presenterar vi våra slutsatser och pekar ut dmections for future wol-k 2 Källan Iang,uage Vi beskriver punkterna-till analys för en liten Imperative pekare språk som fångar impel-tant egenskaper språk som C [KR88] Språket Inkluderar pekare till platser, pekare till funktioner, dynamisk allocahon, och computing adresser av variabler Eftersom analysen flödar okänsligt, styr hitways av språket är irrelevant Den abstrakta syntaxen av relevanta uttalanden av språket visas i Figur 1. Syntaxen för beräkning av variablernas adresser och för indikering av pekaren lånas från C-progl-amming-språket
Steensgaard REF föreslog en nästan linjär tid algoritm som har visat sig skala till miljontals rader av program.