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 di#culty 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: 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 Proofs 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; Proof that 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(n
|
2771
|
Introduction to Automata Theory, Language, and Computation
– Hopcroft, Ullman
- 1979
|
|
1588
|
Computational Complexity
– Papadimitriou
- 1994
|
|
1415
|
The Java Language Specification
– Gosling, Joy, et al.
- 1996
|
|
908
|
Program slicing
– Weiser
- 1984
|
|
519
|
Interprocedural slicing using dependence graphs
– Horwitz, Reps, et al.
- 1990
|
|
415
|
Points-to analysis in almost linear time
– Steensgaard
- 1996
|
|
403
|
Program Analysis and Specialization for the C Programming Language. PhDthesis, University of Copenhagen, DIKU, DIKU report 94/19
– Andersen
- 1994
|
|
339
|
Effective context-sensitive pointer analysis for C programs
– Wilson, Lam
- 1995
|
|
329
|
Context-sensitive interprocedural points-to analysis in the presence of function pointers
– Enami, Ghiya, et al.
- 1994
|
|
301
|
A safe approximate algorithm for interprocedural pointer aliasing
– Landi, Ryder
- 1992
|
|
234
|
The Program Dependence Graph in a Software Development
– Ottenstein, Ottenstein
|
|
234
|
Precise interprocedural dataflow analysis via graph reachability
– Reps, Sagiv, et al.
- 1995
|
|
216
|
Two approaches to interprocedural data flow analysis
– Sharir, Pnueli
- 1981
|
|
214
|
Using program slicing in software maintenance
– Gallagher, Lyle
- 1991
|
|
208
|
Object-oriented type inference
– Palsberg, Schwartzbach
- 1991
|
|
186
|
Fast static analysis of C++ virtual function calls
– Bacon, Sweeney
- 1996
|
|
179
|
Efficient flow-sensitive interprocedural computation of pointer-induced aliases and side effects
– Choi, Burke, et al.
- 1993
|
|
158
|
Precise Concrete Type Inference for Object-Oriented Languages
– Plevyak, Chien
- 1994
|
|
137
|
Fast and Accurate Flow-Insensitive Points-To Analysis
– Shapiro, Horwitz
- 1997
|
|
122
|
Context-insensitive alias analysis reconsidered
– Ruf
- 1995
|
|
114
|
Interprocedural modification side effect analysis with pointer aliasing
– Landi, Ryder, et al.
- 1993
|
|
111
|
Pointer-induced aliasing: A problem classification
– Landi, Ryder
- 1991
|
|
107
|
Global data flow analysis and iterative algorithms
– Kam, Ullman
- 1976
|
|
101
|
Undecidability of static analysis
– Landi
- 1992
|
|
91
|
Relevant Context Inference
– Chatterjee, Ryder, et al.
- 1999
|
|
89
|
The Semantic Approach to Program Slicing
– Venkatesh
- 1991
|
|
87
|
The Cartesian Product Algorithm: Simple and Precise Type Inference Of Parametric Polymorphism
– Agesen
- 1995
|
|
82
|
Putting pointer analysis to work
– Ghiya, Hendren
- 1998
|
|
82
|
Slicing ObjectOriented Software
– Larsen, Harrold
- 1996
|
|
67
|
The effects of precision on pointer analysis
– Shapiro, Horwitz
- 1997
|
|
65
|
FlowInsensitive Interprocedural Alias Analysis
– Burke, Carini, et al.
- 1994
|
|
64
|
A practical interprocedural data flow analysis algorithm
– Barth
- 1978
|
|
62
|
Interprocedural def-use associations for C systems with single level pointers
– Pande, Landi, et al.
- 1994
|
|
61
|
The design of whole-program analysis tools
– Atkinson, Griswold
- 1996
|
|
61
|
Fast interprocedural class analysis
– DeFouw, Grove, et al.
- 1998
|
|
55
|
Lifetime analysis of dynamically allocated objects
– RUGGIERI, T
- 1988
|
|
54
|
Efficient computation of interprocedural definition-use chains
– Harrold, Soffa
- 1994
|
|
53
|
Interprocedural Aliasing in the Presence of Pointers
– Landi
- 1992
|
|
44
|
Inferring types in smalltalk
– Suzuki
- 1981
|
|
43
|
Program decomposition for pointer aliasing: A step towards practical analyses
– Zhang, Ryder, et al.
- 1996
|
|
42
|
Effective whole-program analysis in the presence of pointers
– Atkinson, Griswold
- 1998
|
|
42
|
Precise Interprocedural Chopping
– Reps, Rosay
- 1995
|
|
42
|
Slicing Class Hierarchies in C
– Tip, Choi, et al.
- 1996
|
|
40
|
System-dependence-graph-based slicing of programs with arbitrary interprocedural control flow
– SINHA, HARROLD, et al.
- 1999
|
|
35
|
Reuse-driven interprocedural slicing
– Harrold, Ci
- 1998
|
|
34
|
Flow-insensitive C ++ pointers and polymorphism analysis and its application to slicing
– TONELLA, ANTONIOL, et al.
- 1997
|
|
32
|
More Experience with Data Flow Testing
– Weyuker
- 1993
|
|
30
|
Data-flow-based virtual function resolution
– Pande, Ryder
- 1996
|
|
26
|
Assesing the effects of flow-sensitivity on pointer alias analyses
– Hind, Pioli
- 1998
|
|
26
|
So a. Selecting and using data for integration testing
– Harrold, L
- 1991
|