Author :
Chatterjee, Ramkrishna ; Ryder, Barbara G. ; Landi, William A.
Author_Institution :
Oracle Corp., Nashua, NH, USA
Abstract :
At each program point, points-to analysis for statically typed object oriented programming languages (e.g., Java, C++) determines those objects to which a reference may refer (or a pointer may point) during execution. Points-to analysis is necessary for any semantics based software tools for object oriented systems. Our new complexity results for points-to analysis distinguish the difficulty of intraprocedural and interprocedural points-to analyses for languages with combinations of single-level types (i.e., types with data members only of primitive type), exceptions with or without subtyping, and dynamic dispatch. Our results include: 1) the first polynomial-time algorithm for points-to analysis in the presence of exceptions that handles a robust subset of Java without threads and can be applied to C++; 2) proof that the above algorithm is safe, in general, and provably precise on programs with single-level types and exceptions without subtyping, but not dynamic dispatch, thus, this case is in P; 3) proof that an interprocedural points-to analysis problem with single-level types and exceptions with subtyping, but without dynamic dispatch, is PSPACE-hard, while the intraprocedural problem is PSPACE-complete. Other complexity characterizations of points-to analysis in programs without exceptions are presented, including an algorithm with worst-case bound of O(n5 ), which improves over the O(n7) worst-case bound achievable from previous approaches of T. Reps et al. (1995) and W.A. Landi and B.G. Ryder (1991)
Keywords :
C++ language; Java; computational complexity; exception handling; program diagnostics; programming language semantics; type theory; C++; Java; PSPACE-complete; PSPACE-hard; complexity characterizations; complexity results; data members; dynamic dispatch; exceptions; interprocedural points-to analysis problem; intraprocedural problem; object oriented systems; points-to analysis complexity; polynomial-time algorithm; program point; semantics based software tools; single-level types; statically typed object oriented programming languages; worst-case bound; Algorithm design and analysis; Information analysis; Java; Object oriented modeling; Object oriented programming; Polynomials; Robustness; Runtime; Software tools; Yarn;