[clang] 41d52c5 - [clang][dataflow] Modify `transfer` in `DataflowModel` to take `CFGElement` as input instead of `Stmt`.
Wei Yi Tee via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 19 11:40:55 PDT 2022
Author: Wei Yi Tee
Date: 2022-09-19T18:40:29Z
New Revision: 41d52c5a7f7ad1acf8e84ad6d7f04813c1a5a7ec
URL: https://github.com/llvm/llvm-project/commit/41d52c5a7f7ad1acf8e84ad6d7f04813c1a5a7ec
DIFF: https://github.com/llvm/llvm-project/commit/41d52c5a7f7ad1acf8e84ad6d7f04813c1a5a7ec.diff
LOG: [clang][dataflow] Modify `transfer` in `DataflowModel` to take `CFGElement` as input instead of `Stmt`.
To keep API of transfer functions consistent.
The single use of this transfer function in `ChromiumCheckModel` is also updated.
Reviewed By: gribozavr2, sgatev
Differential Revision: https://reviews.llvm.org/D133933
Added:
Modified:
clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h
clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp
clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
index 098c13cf4e35a..cbd20ad9ee568 100644
--- a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
+++ b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h
@@ -193,8 +193,8 @@ runDataflowAnalysis(
/// example, a model may capture a type and its related functions.
class DataflowModel : public Environment::ValueModel {
public:
- /// Return value indicates whether the model processed the `Stmt`.
- virtual bool transfer(const Stmt *Stmt, Environment &Env) = 0;
+ /// Return value indicates whether the model processed the `Element`.
+ virtual bool transfer(const CFGElement *Element, Environment &Env) = 0;
};
} // namespace dataflow
diff --git a/clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h b/clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h
index 93c427bd1ddc6..e65f40b0b726e 100644
--- a/clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h
+++ b/clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h
@@ -26,7 +26,7 @@ namespace dataflow {
class ChromiumCheckModel : public DataflowModel {
public:
ChromiumCheckModel() = default;
- bool transfer(const Stmt *Stmt, Environment &Env) override;
+ bool transfer(const CFGElement *Element, Environment &Env) override;
private:
/// Declarations for `::logging::CheckError::.*Check`, lazily initialized.
diff --git a/clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp b/clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp
index 3910847316a59..f457964fb1324 100644
--- a/clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp
+++ b/clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp
@@ -50,7 +50,11 @@ bool isCheckLikeMethod(llvm::SmallDenseSet<const CXXMethodDecl *> &CheckDecls,
return CheckDecls.contains(&D);
}
-bool ChromiumCheckModel::transfer(const Stmt *Stmt, Environment &Env) {
+bool ChromiumCheckModel::transfer(const CFGElement *Element, Environment &Env) {
+ auto CS = Element->getAs<CFGStmt>();
+ if (!CS)
+ return false;
+ auto Stmt = CS->getStmt();
if (const auto *Call = dyn_cast<CallExpr>(Stmt)) {
if (const auto *M = dyn_cast<CXXMethodDecl>(Call->getDirectCallee())) {
if (isCheckLikeMethod(CheckDecls, *M)) {
diff --git a/clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp b/clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp
index 574366963bd67..1e149db9b44e7 100644
--- a/clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp
+++ b/clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp
@@ -119,9 +119,7 @@ class ModelAdaptorAnalysis
static NoopLattice initialElement() { return NoopLattice(); }
void transfer(const CFGElement *E, NoopLattice &, Environment &Env) {
- if (auto S = E->getAs<CFGStmt>()) {
- M.transfer(S->getStmt(), Env);
- }
+ M.transfer(E, Env);
}
private:
More information about the cfe-commits
mailing list