Skip to content

Commit 12efeab

Browse files
author
Daniel Kroening
authored
Merge pull request #2781 from smowton/smowton/docs/fi-analysis
Briefly document flow-insensitive analysis
2 parents 53fac78 + 8d38c5d commit 12efeab

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/analyses/README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,17 @@ This is obsolete.
1818

1919
\subsection analyses-flow-insensitive-analysis Flow-insensitive analysis (flow_insensitive_analysist)
2020

21-
To be documented.
21+
Framework for flow-insensitive analyses. Maintains a single global abstract
22+
value which instructions are invited to transform in turn. Unsound (terminates
23+
too early) if
24+
(a) there are two or more instructions that incrementally reach a fixed point,
25+
for example by walking a chain of pointers and updating a points-to set, but
26+
(b) those instructions are separated by instructions that don't update the
27+
abstract value (for example, SKIP instructions). Therefore, not recommended for
28+
new code.
29+
30+
Only current user in-tree is \ref value_set_analysis_fit and its close
31+
relatives, \ref value_set_analysis_fivrt and \ref value_set_analysis_fivrnst
2232

2333
\section analyses-specific-analyses Specific analyses:
2434

src/analyses/flow_insensitive_analysis.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@ Author: Daniel Kroening, [email protected]
99

1010
/// \file
1111
/// Flow Insensitive Static Analysis
12+
///
13+
/// A framework for flow-insensitive analyses. Maintains a single global
14+
/// abstract value (an instance of \ref flow_insensitive_abstract_domain_baset,
15+
/// "the domain,") which instructions are invited to transform in turn.
16+
///
17+
/// Note this is unsound if used naively, because it follows the control-flow
18+
/// graph and terminates when an instruction makes no change to the domain and
19+
/// that instruction's successors have already been visited. Therefore a domain
20+
/// that relies upon every reachable instruction being re-visited upon the
21+
/// domain being updated must ensure that itself, for example by maintaining
22+
/// a map from locations to the latest version of the domain witnessed.
1223

1324
#ifndef CPROVER_ANALYSES_FLOW_INSENSITIVE_ANALYSIS_H
1425
#define CPROVER_ANALYSES_FLOW_INSENSITIVE_ANALYSIS_H

0 commit comments

Comments
 (0)