Detecting Non-cyclicity by Abstract Compilation into Boolean Functions

  • Stefano Rossignoli
  • Fausto Spoto
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 3855)


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.


Boolean Function Logic Program Method Call Garbage Collection Abstract Interpretation 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Apt, K.R., Pedreschi, D.: Reasoning about Termination of Pure Prolog Programs. Information and Computation 106(1), 109–157 (1993)zbMATHCrossRefMathSciNetGoogle Scholar
  2. 2.
    Armstrong, T., Marriott, K., Schachte, P., Søndergaard, H.: Two Classes of Boolean Functions for Dependency Analysis. Science of Computer Programming 31(1), 3–45 (1998)zbMATHCrossRefMathSciNetGoogle Scholar
  3. 3.
    Bossi, A., Gabbrielli, M., Levi, G., Martelli, M.: The s-Semantics Approach: Theory and Applications. Journal of Logic Programming 19/20, 149–197 (1994)CrossRefMathSciNetGoogle Scholar
  4. 4.
    Bryant, R.E.: Graph-Based Algorithms for Boolean Function Manipulation. IEEE Transactions on Computers 35(8), 677–691 (1986)zbMATHCrossRefGoogle Scholar
  5. 5.
    Cousot, P., Cousot, R.: Abstract Interpretation and Applications to Logic Programs. Journal of Logic Programming 13(2,3), 103–179 (1992)zbMATHCrossRefMathSciNetGoogle Scholar
  6. 6.
    Hermenegildo, M., Warren, W., Debray, S.K.: Global Flow Analysis as a Practical Compilation Tool. Journal of Logic Programming 13(2 & 3), 349–366 (1992)CrossRefGoogle Scholar
  7. 7.
    Rossignoli, S., Spoto, F.: Detecting Non-Cyclicity by Abstract Compilation into Boolean Functions (extended version with proofs) (2005), Available at,
  8. 8.
    Secci, S., Spoto, F.: Pair-Sharing Analysis of Object-Oriented Programs. In: Hankin, C., Siveroni, I. (eds.) SAS 2005. LNCS, vol. 3672, pp. 320–335. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  9. 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. 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
  11. 11.
    Winskel, G.: The Formal Semantics of Programming Languages. The MIT Press, Cambridge (1993)zbMATHGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2005

Authors and Affiliations

  • Stefano Rossignoli
    • 1
  • Fausto Spoto
    • 1
  1. 1.Dipartimento di InformaticaUniversità di VeronaVeronaItaly

Personalised recommendations