forked from OSchip/llvm-project
[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
This commit is contained in:
parent
661577b5f4
commit
aed1ab8cab
|
@ -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 {
|
||||
|
|
|
@ -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 {}; }
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue