Section: New Results
Static Analysis of Object-Oriented Languages
Participants : Frédéric Dabrowski, Delphine Demange, Laurent Hubert, Thomas Jensen, David Pichardie.
The Celtiquegroup continues its investigation in various techniques for the static analysis of Object-Oriented Languages like Java.
Static Fields Static Analysis
Although in most cases class initialization works as expected, some static fields may be read before being initialized, despite being initialized in their corresponding class initializer. We propose an analysis  which computes, for each program point, the set of static fields that must have been initialized and discuss its soundness. We show that such an analysis can be directly applied to identify the static fields that may be read before being initialized and to improve the precision while preserving the soundness of a null-pointer analysis.
A Provably Correct Stackless Intermediate Representation For Java Bytecode
The Java virtual machine executes stack-based bytecode. The intensive use of an operand stack has been identified as a major obstacle for static analysis and it is now common for static analysis tools to manipulate a stackless intermediate representation (IR) of bytecode programs. Several algorithms have been proposed to achieve such a transformation, but only little attention has been paid to their formal semantic properties. In  , we provide such a bytecode transformation, describes its semantic correctness and evaluates its performance with respect to the transformation time, the compactness of the obtained code and the impact on static analysis precision.
A fundamental issue in multithreaded programming is detecting data races . A program is said to be well synchronised if it does not contain data races w.r.t. an interleaving semantics. Formally ensuring this property is central, because the Java Memory Model then guarantees that one can safely reason on the interleaved semantics of the program. In  we formalise in the Coq proof assistant a Java bytecode data race analyser based on the conditional must-not alias analysis of Naik and Aiken. The formalisation includes a context-sensitive points-to analysis and an instrumented semantics that counts method calls and loop iterations.