Vesal Vojdani

dblp:90/7226 · DBLP profile ↗
← Back
26ranked-venue papers
1as first author
17since 2021 · last 2026
0000-0003-4336-7980ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 26 · 1 first-author · 17 since 2021Theory of computation · 2 · 1 since 2021
YearPublicationVenuePosition
2026 Comparing Transparent Static Analyzers with Open Verification Dashboard
abstract
Given an input program, sound static analyzers compute a list of potential runtime errors in it. However, measuring their precision and comparing their results remains challenging. In this work, we formalize a notion of transparent static analyzers that report the proof obligations they check, including both verified and unverified obligations. This transparent output enables a semantics-directed, fine-grained comparison and the combination of static analyzers. We introduce the Open Verification Dashboard (OVD), which provides a unified interface to aggregate the results of multiple static analyzers. By juxtaposing verified properties and outstanding warnings, OVD highlights coverage gaps, variabilities and inconsistencies across tools. We experimentally evaluate the benefits of OVD on benchmarks from the Competition on Software Verification (SV-COMP). This work paves the way for a static analysis standard for C runtime error reporting.
Tom Goalard, Karoliine Holter, Simmo Saan, Vesal Vojdani, Raphaël Monat
ECOOP4
2026 Mixed Flow-Sensitive Static Analysis: Engineering Modularity
abstract
Abstract Flow-sensitive and flow-insensitive analyses of programs occupy opposite ends of a spectrum. Between these extremes lie mixed flow sensitive approaches, where some aspects of program behavior are analyzed flow-insensitively and others flow-sensitively. Mixed flow-sensitivity arises, for example, in the analysis of multi-threaded code or code withnon-local control flow. Another instance is global store widening for efficient analysis of functional languages and some forms of pointer analysis. While mixed flow-sensitive analyses are common in the literature, the formulation of the particular analysis problem and the means to solve it are often tightly coupled. Side-effecting constraint systems provide a generic mechanism for describing mixed flow-sensitive analyses, thus decoupling the analysis definition from solver algorithm details. The abstract interpreter Goblint realizes this decoupling, and allows defining mixed flow-sensitive analyses independently of generic solvers. We indicate how the precision of specified analyses can be improved using digests (on the side of the formulation of the analysis problem) and suitable update rules (on the side of the solver). We explain how developers can use Goblint to implement their own mixed flow-sensitive analyses.
Helmut Seidl, Vesal Vojdani, Julian Erhard, Michael Schwarz 0007
FM (2)2
2026 Goblitch: Combining Abstract Interpretation with Symbolic Execution via Witnesses - (Competition Contribution)
Karoliine Holter, Paulína Ayaziová, Simmo Saan, Jan Strejcek, Vesal Vojdani
TACAS (2)5
2026 Goblint: A Portfolio for Mixed Flow-Sensitive Abstract Interpretation - (Competition Contribution)
Simmo Saan, Ali Rasim Kocal, Michael Petter, Karoliine Holter, Julian Erhard, Michael Schwarz 0007, Vesal Vojdani, Helmut Seidl
TACAS (2)7
2025 Correctness Witnesses for Concurrent Programs: Bridging the Semantic Divide with Ghosts
Julian Erhard, Manuel Bentele, Matthias Heizmann, Dominik Klumpp, Simmo Saan, Frank Schüssele, Michael Schwarz 0007, Helmut Seidl, Sarah Tilscher, Vesal Vojdani
VMCAI (1)10
2025 Sound Static Data Race Verification for C: Is the Race Lost?
abstract
Sound static data race freedom verification has been a long-standing challenge in the field of programming languages. While actively researched a decade ago, most practical data race detection tools have since abandoned soundness. Is sound static race freedom verification for real-world C programs a lost cause? In this work, we investigate the obstacles to making significant progress in automated race freedom verification. We selected a benchmark suite of real-world programs and, as our primary contribution, extracted a set of coding idioms that represent fundamental barriers to verification. We expressed these idioms as micro-benchmarks and contributed them as evaluation tasks for the International Competition on Software Verification, SV-COMP. To understand the current state, we measure how sound automated verification tools competing in SV-COMP perform on these idioms and also when used out of the box on the real-world programs. For 8 of the 20 coding idioms, there does exist an automated race freedom verifier that can verify it; however, we also found significant unsoundness in leading verifiers, including Goblint and Deagle. Five of the seven tools failed to return any result on any real-world benchmarks under our chosen resource limitations, with the remaining two tools verifying race freedom for 2 of the 18 programs and crashing or returning inconclusive results on the others. We thus show that state-of-the-art verifiers have both superficial and fundamental barriers to correctly analyzing real-world programs. These barriers constitute the open problems that must be solved to make progress on automated static data race freedom verification.
Karoliine Holter, Simmo Saan, Patrick Lam 0001, Vesal Vojdani
ACM Trans. Program. Lang. Syst.4
2024 Abstract Debuggers: Exploring Program Behaviors using Static Analysis Results
abstract
Traditional, or concrete, debuggers allow developers to step through programs and explore the corresponding concrete program states—developers can query current values of program variables. This exploration enables developers to formulate and refine hypotheses about program behaviors. We propose the novel notion of abstract debuggers, which allow developers to explore abstract program states, as computed by sound static analyzers. Giving developers the ability to interactively explore abstract states empowers them to work with hypotheses that are true for all program executions: they can examine and rule out false positives, or better understand a static analysis’s declaration that some code is indeed safe. Abstract debuggers’ interfaces, reminiscent of conventional debuggers, aim to make navigating and interpreting static analysis results more straightforward. We have formalized the concept, applied it by implementing a tool that leverages the static analyzer Goblint, and illustrate its usefulness through case studies.
Karoliine Holter, Juhan Oskar Hennoste, Patrick Lam 0001, Simmo Saan, Vesal Vojdani
Onward!5
2024 Goblint Validator: Correctness Witness Validation by Abstract Interpretation - (Competition Contribution)
abstract
Abstract Goblintis an abstract interpretation framework for C programs with a specialty in concurrency. Using a novel approach, we turn it into a validator of YAML correctness witnesses for all SV-COMP categories. We describe its results at SV-COMP 2024 which includes the first large-scale evaluation of our validator.
Simmo Saan, Julian Erhard, Michael Schwarz 0007, Stanimir Bozhilov, Karoliine Holter, Sarah Tilscher, Vesal Vojdani, Helmut Seidl
TACAS (3)7
2024 Goblint: Abstract Interpretation for Memory Safety and Termination - (Competition Contribution)
abstract
Abstract Goblintis an abstract interpreter of C programs, focusing on the analysis of multi-threaded code. It is equipped with a variety of abstract domains, as well as analyses which allow it to reason about an array of program properties in a highly configurable manner.Goblinthas been extended with support for the detection of memory safety bugs and non-termination.
Simmo Saan, Julian Erhard, Michael Schwarz 0007, Stanimir Bozhilov, Karoliine Holter, Sarah Tilscher, Vesal Vojdani, Helmut Seidl
TACAS (3)7
2024 Correctness Witness Validation by Abstract Interpretation
Simmo Saan, Michael Schwarz 0007, Julian Erhard, Helmut Seidl, Sarah Tilscher, Vesal Vojdani
VMCAI (1)6
2024 Interactive abstract interpretation: reanalyzing multithreaded C programs for cheap
abstract
Abstract To put sound program analysis at the fingertips of the software developer, we propose a framework for interactive abstract interpretation of multithreaded C code. Abstract interpretation provides sound analysis results, but can be quite costly in general. To achieve quick response times, we incrementalize the analysis infrastructure, including postprocessing, without necessitating any modifications to the analysis specifications themselves. We rely on the local generic fixpoint engine TD – which we enhance with reluctant destabilization to minimize reanalysis effort. Dedicated further improvements support precise incremental analysis of program properties that include concurrency deficiencies such as data-races. The framework has been implemented in the static analyzer Goblint, and combined with the MagpieBridge framework to relay findings to IDEs. We evaluate our implementation w.r.t. the yard sticks of response time and consistency. We also provide examples of program development highlighting the usability of our approach.
Julian Erhard, Simmo Saan, Sarah Tilscher, Michael Schwarz 0007, Karoliine Holter, Vesal Vojdani, Helmut Seidl
Int. J. Softw. Tools Technol. Transf.6
2024 When long jumps fall short: control-flow tracking and misuse detection for nonlocal jumps in C
abstract
Abstract The C programming language offers as a mechanism for nonlocal control flow. This mechanism has complicated semantics. As most developers do not encounter it day-to-day, they may be unfamiliar with all its intricacies – leading to subtle programming errors. At the same time, most static analyzers lack proper support, implying that otherwise sound tools miss whole classes of program deficiencies. We propose a concrete semantics of a subset of C with , where interprocedural s are performed directly, as well as an equivalent formulation where such jumps are implemented via stack-unwinding at the call-sites. Reflecting this semantic equivalence, we propose an approach for lifting existing interprocedural analyses to support and to flag their misuse. To deal with the nonlocal semantics, our approach leverages side-effecting transfer functions, which, when executed, may additionally trigger contributions for program points that are not static control-flow successors. We showcase our analysis on a real-world example and propose a set of litmus tests for other analyzers.
Julian Erhard, Michael Schwarz 0007, Vesal Vojdani, Simmo Saan, Helmut Seidl
Int. J. Softw. Tools Technol. Transf.3
2023 Clustered Relational Thread-Modular Abstract Interpretation with Local Traces
abstract
Abstract We construct novel thread-modular analyses that track relational information for potentially overlapping clusters of global variables – given that they are protected by common mutexes. We provide a framework to systematically increase the precision of clustered relational analyses by splitting control locations based on abstractions of local traces. As one instance, we obtain an analysis of dynamic thread creation and joining. Interestingly, tracking less relational information for globals may result in higher precision. We consider the class of 2-decomposable domains that encompasses many weakly relational domains (e.g., Octagons). For these domains, we prove that maximal precision is attained already for clusters of globals of sizes at most 2.
Michael Schwarz 0007, Simmo Saan, Helmut Seidl, Julian Erhard, Vesal Vojdani
ESOP5
2023 Context-Sensitive Meta-Constraint Systems for Explainable Program Analysis
abstract
Abstract We show how to generate a constraint system of symbolic expressions as part of an inter-procedural constraint-system–based program analysis such that any chosen slice of the intended analysis may be computed through the evaluation of the symbolic constraints. Thus, our method ensures that the computed expressions provide genuine explanations for the chosen analysis slice. The resulting system is then annotated with program location information, translated into closed-form expressions, and simplified to yield a human-readable justification for the analyzer’s verdict. Justifications are given using program locations, constants from the program, abstract lattice operations, loops in the analysis, and computed results.
Kalmer Apinis, Vesal Vojdani
TACAS (2)2
2023 Goblint: Autotuning Thread-Modular Abstract Interpretation - (Competition Contribution)
abstract
Abstract The static analyzer Goblint is dedicated to the analysis of multi-threaded C programs by abstract interpretation. It provides multiple techniques for increasing analysis precision, e.g., configurable context-sensitivity and a wide range of numerical analyses. As a rule of thumb, more precise analyses decrease scalability, while not always necessary for solving the task at hand. Therefore, Goblint has been enhanced with autotuning which, based on syntactical criteria, adapts analysis configuration to the given program such that relevant precision is obtained with acceptable effort.
Simmo Saan, Michael Schwarz 0007, Julian Erhard, Manuel Pietsch, Helmut Seidl, Sarah Tilscher, Vesal Vojdani
TACAS (2)7
2021 Improving Thread-Modular Abstract Interpretation
Michael Schwarz 0007, Simmo Saan, Helmut Seidl, Kalmer Apinis, Julian Erhard, Vesal Vojdani
SAS6
2021 Goblint: Thread-Modular Abstract Interpretation Using Side-Effecting Constraints - (Competition Contribution)
abstract
Abstract Goblintis a static analysis framework for C programs specializing in data race analysis. It relies on thread-modular abstract interpretation where thread interferences are accounted for by means of flow-insensitive global invariants.
Simmo Saan, Michael Schwarz 0007, Kalmer Apinis, Julian Erhard, Helmut Seidl, Ralf Vogler, Vesal Vojdani
TACAS (2)7
2016 Static race detection for device drivers: the Goblint approach
abstract
Device drivers rely on fine-grained locking to ensure safe access to shared data structures. For human testers, concurrency makes such code notoriously hard to debug; for automated reasoning, dynamically allocated memory and low-level pointer manipulation poses significant challenges. We present a flexible approach to data race analysis, implemented in the open source Goblint static analysis framework, that combines different pointer and value analyses in order to handle a wide range of locking idioms, including locks allocated dynamically as well as locks stored in arrays. To the best of our knowledge, this is the most ambitious effort, having lasted well over ten years, to create a fully automated static race detection tool that can deal with most of the intricate locking schemes found in Linux device drivers. Our evaluation shows that these analyses are sufficiently precise, but practical use of these techniques requires inferring environmental and domain-specific assumptions.
Vesal Vojdani, Kalmer Apinis, Vootele Rõtov, Helmut Seidl, Varmo Vene, Ralf Vogler
ASE1
2016 Efficiently intertwining widening and narrowing
Gianluca Amato, Francesca Scozzari, Helmut Seidl, Kalmer Apinis, Vesal Vojdani
Sci. Comput. Program.5
2014 Precise Analysis of Value-Dependent Synchronization in Priority Scheduled Programs
Martin D. Schwarz, Helmut Seidl, Vesal Vojdani, Kalmer Apinis
VMCAI3
2013 How to combine widening and narrowing for non-monotonic systems of equations
abstract
Non-trivial analysis problems require complete lattices with infinite ascending and descending chains. In order to compute reasonably precise post-fixpoints of the resulting systems of equations, Cousot and Cousot have suggested accelerated fixpoint iteration by means of widening and narrowing.
Kalmer Apinis, Helmut Seidl, Vesal Vojdani
PLDI3
2012 Side-Effecting Constraint Systems: A Swiss Army Knife for Program Analysis
Kalmer Apinis, Helmut Seidl, Vesal Vojdani
APLAS3
2011 Static analysis of interrupt-driven programs synchronized via the priority ceiling protocol
abstract
We consider programs for embedded real-time systems which use priority-driven preemptive scheduling with task priorities adjusted dynamically according to the immediate ceiling priority protocol. For these programs, we provide static analyses for detecting data races between tasks running at different priorities as well as methods to guarantee transactional execution of procedures. Beyond that, we demonstrate how general techniques for value analyses can be adapted to this setting by developing a precise analysis of affine equalities.
Martin D. Schwarz, Helmut Seidl, Vesal Vojdani, Peter Lammich, Markus Müller-Olm
POPL3
2010 Shape Analysis of Low-Level C with Overlapping Structures
Jörg Kreiker, Helmut Seidl, Vesal Vojdani
VMCAI3
2009 A Smooth Combination of Linear and Herbrand Equalities for Polynomial Time Must-Alias Analysis
Helmut Seidl, Vesal Vojdani, Varmo Vene
FM2
2009 Region Analysis for Race Detection
Helmut Seidl, Vesal Vojdani
SAS2