Abstract: Static program analysis is the analysis of computer software that focuses on the examination of the source code, without actually executing the program built from that code. An important subclass of static program analysis is that of Points-To Analysis, an analysis that reasons about which objects can ﬂow into which variables, for every possible program execution. The points-to results, are fundamental for further, more complex analyses.
For an analysis like the above to be precise, it has to simulate every aspect of the source code and of the underlying system in which the program will be executed, that can inﬂuence the ﬂow of objects into variables. On the other hand, the results need to be produced within a logical timespan for the analysis to be practical. Thus it is crucial that every overapproximation made by the analysis is as "tight" as possible.
One important feature of object-oriented languages like Java is that of exceptions. Previous work has shown that accurate handling of exceptions can signiﬁcantly affect the precision of the results. In this work, we present three alternative ways to handle exceptions in Java, as well as the effect each one has over the precision and the performance of the resulting analysis. An impressive ﬁnd is the fact that, instead of recording each distinct exception object, we can collapse all exceptions of the same type, and use one representative object per type, with barely any loss in precision but at the same time with a signiﬁcant boost in performance (in many analyses achieving more than 20% improvement).
Our analysis is part of the Doop framework, that provides a points-to analysis for a number of possible types of context, written entirely in Datalog.