TY - GEN
T1 - Reusing Caches and Invariants for Efficient and Sound Incremental Static Analysis
AU - Razafintsialonina, Mamy
AU - Bühler, David
AU - Miné, Antoine
AU - Perrelle, Valentin
AU - Signoles, Julien
N1 - Publisher Copyright:
© Mamy Razafintsialonina, David Bühler, Antoine Miné, Valentin Perrelle, and Julien Signoles.
PY - 2025/6/25
Y1 - 2025/6/25
N2 - Static analysis by means of abstract interpretation is a tool of choice for proving absence of some classes of errors, typically undefined behaviors in C code, in a sound way. However, static analysis tools are hardly integrated in CI/CD processes. One of the main reasons is that they are still time- and memory-expensive to apply after every single patch when developing a program. For solving this issue, incremental static analysis helps developers quickly obtain analysis results after making changes to a program. However, existing approaches are often not guaranteed to be sound, limited to specific analyses, or tied to specific tools. This limits their generalizability and applicability in practice, especially for large and critical software. In this paper, we propose a generic, sound approach to incremental static analysis that is applicable to any abstract interpreter. Our approach leverages the similarity between two versions of a program to soundly reuse previously computed analysis results. We introduce novel methods for summarizing functions and reusing loop invariants. They significantly reduce the cost of reanalysis, while maintaining soundness and a high level of precision. We have formalized our approach, proved it sound, implemented it in Eva, the abstract interpreter of Frama-C, and evaluated it on a set of real-world commits of open-source programs.
AB - Static analysis by means of abstract interpretation is a tool of choice for proving absence of some classes of errors, typically undefined behaviors in C code, in a sound way. However, static analysis tools are hardly integrated in CI/CD processes. One of the main reasons is that they are still time- and memory-expensive to apply after every single patch when developing a program. For solving this issue, incremental static analysis helps developers quickly obtain analysis results after making changes to a program. However, existing approaches are often not guaranteed to be sound, limited to specific analyses, or tied to specific tools. This limits their generalizability and applicability in practice, especially for large and critical software. In this paper, we propose a generic, sound approach to incremental static analysis that is applicable to any abstract interpreter. Our approach leverages the similarity between two versions of a program to soundly reuse previously computed analysis results. We introduce novel methods for summarizing functions and reusing loop invariants. They significantly reduce the cost of reanalysis, while maintaining soundness and a high level of precision. We have formalized our approach, proved it sound, implemented it in Eva, the abstract interpreter of Frama-C, and evaluated it on a set of real-world commits of open-source programs.
KW - Abstract Interpretation
KW - Incremental Analysis
KW - Static Analysis
UR - https://www.scopus.com/pages/publications/105009694433
U2 - 10.4230/LIPIcs.ECOOP.2025.28
DO - 10.4230/LIPIcs.ECOOP.2025.28
M3 - Conference contribution
AN - SCOPUS:105009694433
T3 - Leibniz International Proceedings in Informatics, LIPIcs
BT - 39th European Conference on Object-Oriented Programming, ECOOP 2025
A2 - Aldrich, Jonathan
A2 - Silva, Alexandra
PB - Schloss Dagstuhl- Leibniz-Zentrum fur Informatik GmbH, Dagstuhl Publishing
T2 - 39th European Conference on Object-Oriented Programming, ECOOP 2025
Y2 - 30 June 2025 through 2 July 2025
ER -