Explore a simpler model
Initially, no relationships between branch conditions are remembered. Each individually feasible branch can be taken.
Select a statement to see its source and possible next steps.
An abstraction includes every real execution—and sometimes a few impossible ones. Refinement teaches it which distinctions matter.
Initially, no relationships between branch conditions are remembered. Each individually feasible branch can be taken.
Z3 checks all its branch constraints together. SAT gives an input that reaches the error. UNSAT exposes a false alarm.
Add a predicate from the rejected path and explore again. States now distinguish whether that fact is true or false.
A C++ checker built against an existing SVF toolchain. Every verdict above was produced by an actual analysis run.
The interprocedural control-flow graph and its attached statements. Comparisons and arithmetic are translated from CmpStmt and BinaryOPStmt; LLVM supplies integer widths, constants, and source locations.
Boolean predicate valuations, abstract reachability, complete path checks, and refinement. In this acyclic subset, expressions expand to immutable inputs, so predicates keep their meaning across the graph.
Background on predicate analysis ↗32-bit inputs; bit-vector arithmetic. No loops, memory, general function calls, or value-merging phi instructions yet. Unsupported input returns UNKNOWN. SAFE means safe within this supported model.