aboutsummaryrefslogtreecommitdiff
path: root/clang/include
diff options
context:
space:
mode:
authorSam Estep <sam@samestep.com>2022-07-22 15:15:46 +0000
committerSam Estep <sam@samestep.com>2022-07-22 15:16:29 +0000
commitaed1ab8cabac64b59338f5ebadd12a371cb2ee5d (patch)
tree1bb226a4723becbe1d697f95f6dd2a3f6a457910 /clang/include
parent661577b5f40bb05534869b9635315e9265c37417 (diff)
downloadllvm-aed1ab8cabac64b59338f5ebadd12a371cb2ee5d.zip
llvm-aed1ab8cabac64b59338f5ebadd12a371cb2ee5d.tar.gz
llvm-aed1ab8cabac64b59338f5ebadd12a371cb2ee5d.tar.bz2
[clang][dataflow] Refactor ApplyBuiltinTransfer field out into DataflowAnalysisOptions struct
Depends On D130304 This patch pulls the `ApplyBuiltinTransfer` from the `TypeErasedDataflowAnalysis` class into a new `DataflowAnalysisOptions` struct, to allow us to add additional options later without breaking existing code. Reviewed By: gribozavr2, sgatev Differential Revision: https://reviews.llvm.org/D130305
Diffstat (limited to 'clang/include')
-rw-r--r--clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h6
-rw-r--r--clang/include/clang/Analysis/FlowSensitive/NoopAnalysis.h10
-rw-r--r--clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h25
3 files changed, 30 insertions, 11 deletions
diff --git a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
index 40ac95b..ef8f7a5 100644
--- a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
+++ b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
@@ -63,9 +63,15 @@ public:
using Lattice = LatticeT;
explicit DataflowAnalysis(ASTContext &Context) : Context(Context) {}
+
+ /// Deprecated. Use the `DataflowAnalysisOptions` constructor instead.
explicit DataflowAnalysis(ASTContext &Context, bool ApplyBuiltinTransfer)
: TypeErasedDataflowAnalysis(ApplyBuiltinTransfer), Context(Context) {}
+ explicit DataflowAnalysis(ASTContext &Context,
+ DataflowAnalysisOptions Options)
+ : TypeErasedDataflowAnalysis(Options), Context(Context) {}
+
ASTContext &getASTContext() final { return Context; }
TypeErasedLattice typeErasedInitialElement() final {
diff --git a/clang/include/clang/Analysis/FlowSensitive/NoopAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/NoopAnalysis.h
index 15b7221..4f05f5f 100644
--- a/clang/include/clang/Analysis/FlowSensitive/NoopAnalysis.h
+++ b/clang/include/clang/Analysis/FlowSensitive/NoopAnalysis.h
@@ -24,13 +24,17 @@ namespace dataflow {
class NoopAnalysis : public DataflowAnalysis<NoopAnalysis, NoopLattice> {
public:
+ /// Deprecated. Use the `DataflowAnalysisOptions` constructor instead.
+ NoopAnalysis(ASTContext &Context, bool ApplyBuiltinTransfer)
+ : DataflowAnalysis<NoopAnalysis, NoopLattice>(Context,
+ ApplyBuiltinTransfer) {}
+
/// `ApplyBuiltinTransfer` controls whether to run the built-in transfer
/// functions that model memory during the analysis. Their results are not
/// used by `NoopAnalysis`, but tests that need to inspect the environment
/// should enable them.
- NoopAnalysis(ASTContext &Context, bool ApplyBuiltinTransfer)
- : DataflowAnalysis<NoopAnalysis, NoopLattice>(Context,
- ApplyBuiltinTransfer) {}
+ NoopAnalysis(ASTContext &Context, DataflowAnalysisOptions Options)
+ : DataflowAnalysis<NoopAnalysis, NoopLattice>(Context, Options) {}
static NoopLattice initialElement() { return {}; }
diff --git a/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h
index 5e16819..b043062 100644
--- a/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h
+++ b/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h
@@ -30,6 +30,14 @@
namespace clang {
namespace dataflow {
+struct DataflowAnalysisOptions {
+ /// Determines whether to apply the built-in transfer functions.
+ // FIXME: Remove this option once the framework supports composing analyses
+ // (at which point the built-in transfer functions can be simply a standalone
+ // analysis).
+ bool ApplyBuiltinTransfer = true;
+};
+
/// Type-erased lattice element container.
///
/// Requirements:
@@ -42,16 +50,17 @@ struct TypeErasedLattice {
/// Type-erased base class for dataflow analyses built on a single lattice type.
class TypeErasedDataflowAnalysis : public Environment::ValueModel {
- /// Determines whether to apply the built-in transfer functions.
- // FIXME: Remove this option once the framework supports composing analyses
- // (at which point the built-in transfer functions can be simply a standalone
- // analysis).
- bool ApplyBuiltinTransfer;
+ DataflowAnalysisOptions Options;
public:
- TypeErasedDataflowAnalysis() : ApplyBuiltinTransfer(true) {}
+ TypeErasedDataflowAnalysis() : Options({}) {}
+
+ /// Deprecated. Use the `DataflowAnalysisOptions` constructor instead.
TypeErasedDataflowAnalysis(bool ApplyBuiltinTransfer)
- : ApplyBuiltinTransfer(ApplyBuiltinTransfer) {}
+ : Options({ApplyBuiltinTransfer}) {}
+
+ TypeErasedDataflowAnalysis(DataflowAnalysisOptions Options)
+ : Options(Options) {}
virtual ~TypeErasedDataflowAnalysis() {}
@@ -80,7 +89,7 @@ public:
/// Determines whether to apply the built-in transfer functions, which model
/// the heap and stack in the `Environment`.
- bool applyBuiltinTransfer() const { return ApplyBuiltinTransfer; }
+ bool applyBuiltinTransfer() const { return Options.ApplyBuiltinTransfer; }
};
/// Type-erased model of the program at a given program point.