Pointer analysis is widely used as a base for different kinds of
static analyses and compiler optimizations. Designing a scalable
pointer analysis with acceptable precision for use in production
compilers is still an open question. Modern object oriented languages
like Java and Scala promote abstractions and code reuse, both of which
make it difficult to achieve precision. Collection data structures are
an example of a pervasively used component in such languages. But
analyzing collection implementations with full context sensitivity
leads to prohibitively long analysis times.
We use semantic models to reduce the complex internal
implementation of, e.g., a collection to a small and concise model.
Analyzing the model with context sensitivity leads to precise results
with only a modest increase in analysis time. The models must be
written manually, which is feasible because a model method usually
consists of only a few statements.
Our implementation in
GraalVM Native Image shows a rise in useful precision (1.35X rise in
the number of checkcast statements that can be elided over the default
analysis configuration) with a manageable performance cost (19\% rise
in analysis time).