Author: Sam Estep Date: 2022-07-22T15:16:29Z New Revision: aed1ab8cabac64b59338f5ebadd12a371cb2ee5d
URL: https://github.com/llvm/llvm-project/commit/aed1ab8cabac64b59338f5ebadd12a371cb2ee5d DIFF: https://github.com/llvm/llvm-project/commit/aed1ab8cabac64b59338f5ebadd12a371cb2ee5d.diff LOG: [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 Added: Modified: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h clang/include/clang/Analysis/FlowSensitive/NoopAnalysis.h clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h Removed: ################################################################################ diff --git a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h index 40ac95b3abddb..ef8f7a51496c9 100644 --- a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h +++ b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h @@ -63,9 +63,15 @@ class DataflowAnalysis : public TypeErasedDataflowAnalysis { 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 15b72211fa18c..4f05f5f4554bb 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 5e168194064f4..b043062459e4e 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 @@ class TypeErasedDataflowAnalysis : public Environment::ValueModel { /// 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. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits