This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG41d52c5a7f7a: [clang][dataflow] Modify `transfer` in `DataflowModel` to take `CFGElement` as… (authored by wyt).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D133933/new/ https://reviews.llvm.org/D133933 Files: 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 Index: clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp =================================================================== --- clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp +++ clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp @@ -119,9 +119,7 @@ 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: Index: clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp =================================================================== --- clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp +++ clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp @@ -50,7 +50,11 @@ 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)) { Index: clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h =================================================================== --- clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h +++ clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h @@ -26,7 +26,7 @@ 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. Index: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h =================================================================== --- clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h +++ clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h @@ -193,8 +193,8 @@ /// 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
Index: clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp =================================================================== --- clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp +++ clang/unittests/Analysis/FlowSensitive/ChromiumCheckModelTest.cpp @@ -119,9 +119,7 @@ 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: Index: clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp =================================================================== --- clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp +++ clang/lib/Analysis/FlowSensitive/Models/ChromiumCheckModel.cpp @@ -50,7 +50,11 @@ 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)) { Index: clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h =================================================================== --- clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h +++ clang/include/clang/Analysis/FlowSensitive/Models/ChromiumCheckModel.h @@ -26,7 +26,7 @@ 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. Index: clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h =================================================================== --- clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h +++ clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h @@ -193,8 +193,8 @@ /// 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
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits