[clang] [clang][dataflow] Fully support Environment construction for Stmt analysis. (PR #91616)
Samira Bazuzi via cfe-commits
cfe-commits at lists.llvm.org
Wed May 15 08:43:57 PDT 2024
================
@@ -164,23 +169,28 @@ class Environment {
Environment &operator=(Environment &&Other) = default;
/// Creates an environment that uses `DACtx` to store objects that encompass
- /// the state of a program.
- ///
- /// If `DeclCtx` is a function, initializes the environment with symbolic
- /// representations of the function parameters.
- ///
- /// If `DeclCtx` is a non-static member function, initializes the environment
- /// with a symbolic representation of the `this` pointee.
- Environment(DataflowAnalysisContext &DACtx, const DeclContext &DeclCtx);
+ /// the state of a program, with `S` as the initial analysis target.
+ Environment(DataflowAnalysisContext &DACtx, Stmt &S) : Environment(DACtx) {
+ InitialTargetStmt = &S;
+ }
- /// Assigns storage locations and values to all parameters, captures, global
- /// variables, fields and functions referenced in the function currently being
- /// analyzed.
+ /// Creates an environment that uses `DACtx` to store objects that encompass
+ /// the state of a program, with `FD` as the initial analysis target.
///
/// Requirements:
///
/// The function must have a body, i.e.
/// `FunctionDecl::doesThisDecalarationHaveABody()` must be true.
+ Environment(DataflowAnalysisContext &DACtx, const FunctionDecl &FD)
+ : Environment(DACtx, *FD.getBody()) {
+ InitialTargetFunc = &FD;
+ }
+
+ /// Assigns storage locations and values to all parameters, captures, global
+ /// variables, fields and functions referenced in the initial analysis target.
+ ///
+ /// If the target is a non-static member function, initializes the environment
+ /// with a symbolic representation of the `this` pointee.
void initialize();
----------------
bazuzi wrote:
The call stack being assumed non-empty was the case previously. Now these two are not technically on the call stack, and the function will no longer crash if called without InitialTargetStmt being non-null. It just doesn't do anything. Updated the comment to indicate this.
https://github.com/llvm/llvm-project/pull/91616
More information about the cfe-commits
mailing list