Analysis Framework

This section covers the core analysis components and frameworks in Lotus.

Lotus provides several reusable analysis utilities and frameworks under lib/Analysis and adjacent subsystem modules such as lib/Concurrency. These components complement the alias analyses and high-level analyzers such as CLAM (numerical abstract interpretation) and SymAbsAI (symbolic abstraction + abstract interpretation) built in lib/Verification.

Overview

At a glance:

  • CFG (lib/Analysis/CFG): Control Flow Graph utilities for reachability, dominance, and structural reasoning. See CFG Analysis.

  • ControlDependence (lib/Analysis/ControlDependence): Standard CD, NTSCD variants, DOD variants, strong control closure, and Lotus ICFG integration. See Control-Dependence Analysis.

  • Concurrency (lib/Concurrency): Thread-aware analyses for multi-threaded code (MHP, lock sets, thread modeling). Now documented in its own section: see Concurrency Analysis.

  • DebugInfo (lib/Analysis/DebugInfo): Source-location and metadata extraction support. See Debug Info.

  • Loop (lib/Analysis/Loop): Loop-dependence, iteration-space, and transformation-oriented loop analyses. See Loop Analysis Framework.

  • NullPointer (lib/Analysis/NullPointer): A family of nullness and null-flow analyses. See Null Pointer Analysis.

  • TypeHierarchy (lib/Analysis/TypeHierarchy): Type-hierarchy and vtable recovery for object-oriented code. See Type Hierarchy.

  • SCCP (lib/Analysis/SCCP): Sparse conditional constant propagation using a three-valued lattice (Top/Constant/Bottom) to discover constants and dead code. See SCCP — Sparse Conditional Constant Propagation.

  • ParameterSummary (lib/Analysis/ParameterSummary): Per-function parameter effect summaries tracking freed, dereferenced, and allocated parameters, with transitive call-graph composition. See ParameterSummary — Parameter Effect Summary Analysis.

  • Multiplicity (lib/Analysis/Multiplicity): Allocation multiplicity classification — classifies global, stack, and heap allocations as Unique or Summary. See Multiplicity — Allocation Multiplicity Classification.

  • Purity (lib/Analysis/Purity): Function-level purity and side-effect analysis — classifies functions as Const, Pure, Impure, or Unknown using attribute inference, MemorySSA summaries, and external summary stores. See Purity Analysis.

  • Profile (lib/Analysis/Profile): Profile-guided hot-code detection using LLVM’s BlockFrequencyInfo and BranchProbabilityInfo for instruction, basic-block, and loop frequency queries. See Profile Analysis.

Higher-level analyzers such as CLAM and SymAbsAI build on these components; see CLAM – Abstract Interpretation Framework and SymAbsAI – Symbolic Abstraction + Abstract Interpretation for details.