Detecting Non-cyclicity by Abstract Compilation into Boolean Functions
Programming languages such as C, C++ and Java bind variables to dynamically-allocated data-structures held in memory. This lets programs build cyclical data at run-time, which complicates termination analysis and garbage collection. It is hence desirable to spot those variables which are only bound to non-cyclical data at run-time. We solve this problem by using abstract interpretation to define the abstract domain NC representing those variables. We relate NC through a Galois insertion to the concrete domain of program states. Hence NC is not redundant. We define a correct abstract denotational semantics over NC, which uses preliminary sharing information between variables to get more precise results. We apply it to a simple example of analysis. We use a Boolean representation for the abstract denotations over NC, which leads to an efficient implementation in terms of binary decision diagrams and to the elegant and efficient use of abstract compilation.
KeywordsBoolean Function Logic Program Method Call Garbage Collection Abstract Interpretation
Unable to display preview. Download preview PDF.
- 7.Rossignoli, S., Spoto, F.: Detecting Non-Cyclicity by Abstract Compilation into Boolean Functions (extended version with proofs) (2005), Available at, http://www.sci.univr.it/~spoto/papers.html
- 9.Steensgaard, B.: Points-to Analysis in Almost Linear Time. In: Principles of Programming Languages (POPL), St. Petersburg Beach, Florida, USA, January 1996, pp. 32–41 (1996)Google Scholar
- 10.Wilhelm, R., Reps, T.W., Sagiv, S.: Shape Analysis and Applications. In: Srikant, Y.N., Shankar, P. (eds.) The Compiler Design Handbook, pp. 175–218. CRC Press, Boca Raton (2002)Google Scholar