VLDB 2026 Research / reviewers in the wild / expert
Francesco Logozzo
dblp:92/3
· DBLP profile ↗
29ranked-venue papers
11as first author
1since 2021 · last 2025
0009-0005-4348-322XORCID · corroborated
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 28 · 11 first-author · 1 since 2021
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
11 papers |
Program verification · 46% Program analysis · 36% Runtime systems and virtual machines · 9% | |
| Network and information security
1 paper |
Systems and software security · 100% |
Topics — the 26 heaviest of 27, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis
static analysis |
1.5 | 5 | 2025 | Revealing Sources of (Memory) Errors via Backward Analysis · Proc. ACM Program. Lang. 2025 Automatic Contract Insertion with CCBot · IEEE Trans. Software Eng. 2017 Tracing compilation by abstract interpretation · POPL 2014 |
Program verification › program logic
incorrectness logic |
0.9 | 1 | 2025 | Revealing Sources of (Memory) Errors via Backward Analysis · Proc. ACM Program. Lang. 2025 |
Program verification
program logic |
0.9 | 1 | 2025 | Revealing Sources of (Memory) Errors via Backward Analysis · Proc. ACM Program. Lang. 2025 |
Program verification › program logic
separation logic |
0.9 | 1 | 2025 | Revealing Sources of (Memory) Errors via Backward Analysis · Proc. ACM Program. Lang. 2025 |
Program analysis › static analysis
abstract interpretation |
0.8 | 5 | 2015 | Analyzing Program Analyses · POPL 2015 Tracing compilation by abstract interpretation · POPL 2014 An abstract interpretation framework for refactoring with application to extract methods with contracts · OOPSLA 2012 |
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation |
0.5 | 3 | 2016 | An Abstract Interpretation-Based Model of Tracing Just-in-Time Compilation · ACM Trans. Program. Lang. Syst. 2016 Tracing compilation by abstract interpretation · POPL 2014 SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010 |
Program verification
contract verification |
0.4 | 2 | 2017 | Automatic Contract Insertion with CCBot · IEEE Trans. Software Eng. 2017 Modular and verified automatic program repair · OOPSLA 2012 |
Software testing
fault detection |
0.3 | 1 | 2017 | Automatic Contract Insertion with CCBot · IEEE Trans. Software Eng. 2017 |
Program analysis › static analysis
bug detection |
0.3 | 1 | 2025 | Revealing Sources of (Memory) Errors via Backward Analysis · Proc. ACM Program. Lang. 2025 |
Program analysis › dynamic analysis
memory error detection |
0.3 | 1 | 2025 | Revealing Sources of (Memory) Errors via Backward Analysis · Proc. ACM Program. Lang. 2025 |
Program verification
static verification |
0.2 | 1 | 2014 | Verification modulo versions: towards usable verification · PLDI 2014 |
Debugging and program repair
automated program repair |
0.1 | 1 | 2012 | Modular and verified automatic program repair · OOPSLA 2012 |
Program verification › annotation inference
contract inference |
0.1 | 1 | 2012 | An abstract interpretation framework for refactoring with application to extract methods with contracts · OOPSLA 2012 |
Program verification
modular verification |
0.1 | 1 | 2012 | Modular and verified automatic program repair · OOPSLA 2012 |
Software maintenance and evolution
refactoring |
0.1 | 1 | 2012 | An abstract interpretation framework for refactoring with application to extract methods with contracts · OOPSLA 2012 |
Runtime systems and virtual machines › dynamic compilation › just-in-time compilation
trace-based compilation |
0.1 | 1 | 2010 | SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010 |
Systems and software security
memory safety |
0.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Systems and software security › memory safety
unsafe code verification |
0.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Program verification › security property verification
memory safety verification |
0.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Program analysis › static analysis › abstract interpretation
numerical abstract domains |
0.1 | 1 | 2015 | Analyzing Program Analyses · POPL 2015 |
Program analysis › static analysis › abstract interpretation
octagon domain |
0.1 | 1 | 2015 | Analyzing Program Analyses · POPL 2015 |
Runtime systems and virtual machines
dynamic language implementation |
0.1 | 1 | 2014 | Tracing compilation by abstract interpretation · POPL 2014 |
Program verification › equivalence checking
regression verification |
0.1 | 1 | 2014 | Verification modulo versions: towards usable verification · PLDI 2014 |
Software maintenance and evolution › software configuration management
version control |
0.1 | 1 | 2014 | Verification modulo versions: towards usable verification · PLDI 2014 |
Debugging and program repair
fault localization |
0.0 | 1 | 2012 | Modular and verified automatic program repair · OOPSLA 2012 |
Runtime systems and virtual machines
managed runtime |
0.0 | 1 | 2010 | SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010 |
Methods — techniques the papers use, named apart from their topics
abstract interpretation · 1.0under-approximation · 0.9sufficient incorrectness logic · 0.9proof system · 0.9precondition/postcondition inference · 0.3object invariants · 0.3code instrumentation · 0.3static analysis · 0.2semantic environment condition inference · 0.2forward/backward analysis · 0.1numerical abstract domains · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2025 | Revealing Sources of (Memory) Errors via Backward AnalysisabstractSound over-approximation methods are effective for proving the absence of errors, but inevitably produce false alarms that can hamper programmers. In contrast, under-approximation methods focus on bug detection and are free from false alarms. In this work, we present two novel proof systems designed to locate the source of errors via backward under-approximation, namely Sufficient Incorrectness Logic (SIL) and its specialization for handling memory errors, called Separation SIL. The SIL proof system is minimal, sound and complete for Lisbon triples, enabling a detailed comparison of triple-based program logics across various dimensions, including negation, approximation, execution order, and analysis objectives. More importantly, SIL lays the foundation for our main technical contribution, by distilling the inference rules of Separation SIL, a sound and (relatively) complete proof system for automated backward reasoning in programs involving pointers and dynamic memory allocation. The completeness result for Separation SIL relies on a careful crafting of both the assertion language and the rules for atomic commands. Flavio Ascari, Roberto Bruni 0001, Roberta Gori, Francesco Logozzo |
Proc. ACM Program. Lang. | 4 |
| 2017 | Automatic Contract Insertion with CCBotabstractExisting static analysis tools require significant programmer effort. On large code bases, static analysis tools produce thousands of warnings. It is unrealistic to expect users to review such a massive list and to manually make changes for each warning. To address this issue we propose CCBot (short for CodeContracts Bot), a new tool that applies the results of static analysis to existing code through automatic code transformation. Specifically, CCBot instruments the code with method preconditions, postconditions, and object invariants which detect faults at runtime or statically using a static contract checker. The only configuration the programmer needs to perform is to give CCBot the file paths to code she wants instrumented. This allows the programmer to adopt contract-based static analysis with little effort. CCBot's instrumented version of the code is guaranteed to compile if the original code did. This guarantee means the programmer can deploy or test the instrumented code immediately without additional manual effort. The inserted contracts can detect common errors such as null pointer dereferences and out-of-bounds array accesses. CCBot is a robust large-scale tool with an open-source C# implementation. We have tested it on real world projects with tens of thousands of lines of code. We discuss several projects as case studies, highlighting undiscovered bugs found by CCBot, including 22 new contracts that were accepted by the project authors. Scott A. Carr, Francesco Logozzo, Mathias Payer |
IEEE Trans. Software Eng. | 2 |
| 2016 | An Abstract Interpretation-Based Model of Tracing Just-in-Time CompilationabstractTracing just-in-time compilation is a popular compilation technique for the efficient implementation of dynamic languages, which is commonly used for JavaScript, Python, and PHP. It relies on two key ideas. First, it monitors program execution in order to detect so-called hot paths, that is, the most frequently executed program paths. Then, hot paths are optimized by exploiting some information on program stores that is available and therefore gathered at runtime. The result is a residual program where the optimized hot paths are guarded by sufficient conditions ensuring some form of equivalence with the original program. The residual program is persistently mutated during its execution, for example, to add new optimized hot paths or to merge existing paths. Tracing compilation is thus fundamentally different from traditional static compilation. Nevertheless, despite the practical success of tracing compilation, very little is known about its theoretical foundations. We provide a formal model of tracing compilation of programs using abstract interpretation. The monitoring phase (viz., hot path detection) corresponds to an abstraction of the trace semantics of the program that captures the most frequent occurrences of sequences of program points together with an abstraction of their corresponding stores, for example, a type environment. The optimization phase (viz., residual program generation) corresponds to a transform of the original program that preserves its trace semantics up to a given observation as modeled by some abstraction. We provide a generic framework to express dynamic optimizations along hot paths and to prove them correct. We instantiate it to prove the correctness of dynamic type specialization and constant variable folding. We show that our framework is more general than the model of tracing compilation introduced by Guo and Palsberg [2011], which is based on operational bisimulations. In our model, we can naturally express hot path reentrance and common optimizations like dead-store elimination, which are either excluded or unsound in Guo and Palsberg’s framework. Stefano Dissegna, Francesco Logozzo, Francesco Ranzato |
ACM Trans. Program. Lang. Syst. | 2 |
| 2015 | Analyzing Program AnalysesabstractWe want to prove that a static analysis of a given program is complete, namely, no imprecision arises when asking some query on the program behavior in the concrete (ie, for its concrete semantics) or in the abstract (ie, for its abstract interpretation). Completeness proofs are therefore useful to assign confidence to alarms raised by static analyses. We introduce the completeness class of an abstraction as the set of all programs for which the abstraction is complete. Our first result shows that for any nontrivial abstraction, its completeness class is not recursively enumerable. We then introduce a stratified deductive system to prove the completeness of program analyses over an abstract domain A. We prove the soundness of the deductive system. We observe that the only sources of incompleteness are assignments and Boolean tests --- unlikely a common belief in static analysis, joins do not induce incompleteness. The first layer of this proof system is generic, abstraction-agnostic, and it deals with the standard constructs for program composition, that is, sequential composition, branching and guarded iteration. The second layer is instead abstraction-specific: the designer of an abstract domain A provides conditions for completeness in A of assignments and Boolean tests which have to be checked by a suitable static analysis or assumed in the completeness proof as hypotheses. We instantiate the second layer of this proof system first with a generic nonrelational abstraction in order to provide a sound rule for the completeness of assignments. Orthogonally, we instantiate it to the numerical abstract domains of Intervals and Octagons, providing necessary and sufficient conditions for the completeness of their Boolean tests and of assignments for Octagons. Roberto Giacobazzi, Francesco Logozzo, Francesco Ranzato |
POPL | 2 |
| 2014 | Verification modulo versions: towards usable verificationabstractWe introduce Verification Modulo Versions (VMV), a new static analysis technique for reducing the number of alarms reported by static verifiers while providing sound semantic guarantees. First, VMV extracts semantic environment conditions from a base program P. Environmental conditions can either be sufficient conditions (implying the safety of P) or necessary conditions (implied by the safety of P). Then, VMV instruments a new version of the program, P', with the inferred conditions. We prove that we can use (i) sufficient conditions to identify abstract regressions of P' w.r.t. P; and (ii) necessary conditions to prove the relative correctness of P' w.r.t. P. We show that the extraction of environmental conditions can be performed at a hierarchy of abstraction levels (history, state, or call conditions) with each subsequent level requiring a less sophisticated matching of the syntactic changes between P' and P. Call conditions are particularly useful because they only require the syntactic matching of entry points and callee names across program versions. We have implemented VMV in a widely used static analysis and verification tool. We report our experience on two large code bases and demonstrate a substantial reduction in alarms while additionally providing relative correctness guarantees. Francesco Logozzo, Shuvendu K. Lahiri, Manuel Fähndrich, Sam Blackshear |
PLDI | 1 |
| 2014 | Tracing compilation by abstract interpretationabstractTracing just-in-time compilation is a popular compilation schema for the efficient implementation of dynamic languages, which is commonly used for JavaScript, Python, and PHP. It relies on two key ideas. First, it monitors the execution of the program to detect so-called hot paths, i.e., the most frequently executed paths. Then, it uses some store information available at runtime to optimize hot paths. The result is a residual program where the optimized hot paths are guarded by sufficient conditions ensuring the equivalence of the optimized path and the original program. The residual program is persistently mutated during its execution, e.g., to add new optimized paths or to merge existing paths. Tracing compilation is thus fundamentally different than traditional static compilation. Nevertheless, despite the remarkable practical success of tracing compilation, very little is known about its theoretical foundations. Stefano Dissegna, Francesco Logozzo, Francesco Ranzato |
POPL | 2 |
| 2013 | Automatic Inference of Necessary Preconditions
Patrick Cousot, Radhia Cousot, Manuel Fähndrich, Francesco Logozzo |
VMCAI | 4 |
| 2012 | Inference of Necessary Field Conditions with Abstract Interpretation
Mehdi Bouaziz, Francesco Logozzo, Manuel Fähndrich |
APLAS | 2 |
| 2012 | An abstract interpretation framework for refactoring with application to extract methods with contractsabstractMethod extraction is a common refactoring feature provided by most modern IDEs. It replaces a user-selected piece of code with a call to an automatically generated method. We address the problem of automatically inferring contracts (precondition, postcondition) for the extracted method. We require the inferred contract: (a) to be valid for the extracted method (validity); (b) to guard the language and programmer assertions in the body of the extracted method by an opportune precondition (safety); (c) to preserve the proof of correctness of the original code when analyzing the new method separately (completeness); and (d) to be the most general possible (generality). These requirements rule out trivial solutions (e.g., inlining, projection, etc). We propose two theoretical solutions to the problem. The first one is simple and optimal. It is valid, safe, complete and general but unfortunately not effectively computable (except for unrealistic finiteness/decidability hypotheses). The second one is based on an iterative forward/backward method. We show it to be valid, safe, and, under reasonable assumptions, complete and general. We prove that the second solution subsumes the first. All justifications are provided with respect to a new, set-theoretic version of Hoare logic (hence without logic), and abstractions of Hoare logic, revisited to avoid surprisingly unsound inference rules. Patrick Cousot, Radhia Cousot, Francesco Logozzo, Michael Barnett 0001 |
OOPSLA | 3 |
| 2012 | Modular and verified automatic program repairabstractWe study the problem of suggesting code repairs at design time, based on the warnings issued by modular program verifiers. We introduce the concept of a verified repair, a change to a program's source that removes bad execution traces while increasing the number of good traces, where the bad/good traces form a partition of all the traces of a program. Repairs are property-specific. We demonstrate our framework in the context of warnings produced by the modular cccheck (a.k.a. Clousot) abstract interpreter, and generate repairs for missing contracts, incorrect locals and objects initialization, wrong conditionals, buffer overruns, arithmetic overflow and incorrect floating point comparisons. We report our experience with automatically generating repairs for the .NET framework libraries, generating verified repairs for over 80% of the warnings generated by cccheck. Francesco Logozzo, Thomas Ball 0001 |
OOPSLA | 1 |
| 2011 | A parametric segmentation functor for fully automatic and scalable array content analysisabstractWe introduce FunArray, a parametric segmentation abstract domain functor for the fully automatic and scalable analysis of array content properties. The functor enables a natural, painless and efficient lifting of existing abstract domains for scalar variables to the analysis of uniform compound data-structures such as arrays and collections. The analysis automatically and semantically divides arrays into consecutive non-overlapping possibly empty segments. Segments are delimited by sets of bound expressions and abstracted uniformly. All symbolic expressions appearing in a bound set are equal in the concrete. The FunArray can be naturally combined via reduced product with any existing analysis for scalar variables. The analysis is presented as a general framework parameterized by the choices of bound expressions, segment abstractions and the reduction operator. Once the functor has been instantiated with fixed parameters, the analysis is fully automatic. Patrick Cousot, Radhia Cousot, Francesco Logozzo |
POPL | 3 |
| 2011 | Precondition Inference from Intermittent Assertions and Application to Contracts on Collections
Patrick Cousot, Radhia Cousot, Francesco Logozzo |
VMCAI | 3 |
| 2011 | Practical Verification for the Working Programmer with CodeContracts and Abstract Interpretation - (Invited Talk)
Francesco Logozzo |
VMCAI | 1 |
| 2011 | SubPolyhedra: a family of numerical abstract domains for the (more) scalable inference of linear inequalities
Vincent Laviron, Francesco Logozzo |
Int. J. Softw. Tools Technol. Transf. | 2 |
| 2010 | RATA: Rapid Atomic Type Analysis by Abstract Interpretation - Application to JavaScript Optimization
Francesco Logozzo, Herman Venter |
CC | 1 |
| 2010 | SPUR: a trace-based JIT compiler for CILabstractTracing just-in-time compilers (TJITs) determine frequently executed traces (hot paths and loops) in running programs and focus their optimization effort by emitting optimized machine code specialized to these traces. Prior work has established this strategy to be especially beneficial for dynamic languages such as JavaScript, where the TJIT interfaces with the interpreter and produces machine code from the JavaScript trace. Michael Bebenita, Florian Brandner, Manuel Fähndrich, Francesco Logozzo, Wolfram Schulte, Nikolai Tillmann, Herman Venter |
OOPSLA | 4 |
| 2010 | Pentagons: A weakly relational abstract domain for the efficient validation of array accesses
Francesco Logozzo, Manuel Fähndrich |
Sci. Comput. Program. | 1 |
| 2009 | Refining Abstract Interpretation-Based Static Analyses with Hints
Vincent Laviron, Francesco Logozzo |
APLAS | 2 |
| 2009 | Inferring Dataflow Properties of User Defined Table Processors
Songtao Xia, Manuel Fähndrich, Francesco Logozzo |
SAS | 3 |
| 2009 | SubPolyhedra: A (More) Scalable Approach to Infer Linear Inequalities
Vincent Laviron, Francesco Logozzo |
VMCAI | 2 |
| 2009 | Class invariants as abstract interpretation of trace semantics
Francesco Logozzo |
Comput. Lang. Syst. Struct. | 1 |
| 2008 | On the Relative Completeness of Bytecode Analysis Versus Source Code Analysis
Francesco Logozzo, Manuel Fähndrich |
CC | 1 |
| 2008 | Safer unsafe code for .NETabstractThe.NET intermediate language (MSIL) allows expressing both statically verifiable memory and type safe code (typi-cally called managed), as well as unsafe code using direct pointer manipulations. Unsafe code can be expressed in C# by marking regions of code as unsafe. Writing unsafe code can be useful where the rules of managed code are too strict. The obvious drawback of unsafe code is that it opens the door to programming errors typical of C and C++, namely memory access errors such as buffer overruns. Worse, a sin-gle piece of unsafe code may corrupt memory and destabi-lize the entire runtime or allow attackers to compromise the security of the platform. We present a new static analysis based on abstract in-terpretation to check memory safety for unsafe code in the.NET framework. The core of the analysis is a new numeri-cal abstract domain, Strp, which is used to efficiently com-pute memory invariants. Strp is combined with lightweight abstract domains to raise the precision, yet achieving scala-bility. We implemented this analysis in Clousot, a generic static analyzer for.NET. In combination with contracts ex-pressed in FoxTrot, an MSIL based annotation language for.NET, our analysis provides static safety guarantees on memory accesses in unsafe code. We tested it on all the as-semblies of the.NET framework. We compare our results with those obtained using existing domains, showing how they are either too imprecise (e.g., Intervals or Octagons) or too expensive (Polyhedra) to be used in practice. Pietro Ferrara 0001, Francesco Logozzo, Manuel Fähndrich |
OOPSLA | 2 |
| 2007 | Cibai: An Abstract Interpretation-Based Static Analyzer for Modular Analysis and Verification of Java Classes
Francesco Logozzo |
VMCAI | 1 |
| 2006 | Semantic Hierarchy Refactoring by Abstract Interpretation
Francesco Logozzo, Agostino Cortesi |
VMCAI | 1 |
| 2005 | Loop Invariants on Demand
K. Rustan M. Leino, Francesco Logozzo |
APLAS | 2 |
| 2005 | Abstract Interpretation-Based Verification of Non-functional Requirements
Agostino Cortesi, Francesco Logozzo |
COORDINATION | 2 |
| 2004 | Automatic Inference of Class Invariants
Francesco Logozzo |
VMCAI | 1 |
| 2003 | Class-Level Modular Analysis for Object Oriented Languages
Francesco Logozzo |
SAS | 1 |