Author: Stanislav Gatev Date: 2022-08-03T05:58:38Z New Revision: c44c71843f3eca71ef109d2e0730722a6d8e5675
URL: https://github.com/llvm/llvm-project/commit/c44c71843f3eca71ef109d2e0730722a6d8e5675 DIFF: https://github.com/llvm/llvm-project/commit/c44c71843f3eca71ef109d2e0730722a6d8e5675.diff LOG: [clang][dataflow] Make the type of the post visit callback consistent Make the types of the post visit callbacks in `transferBlock` and `runTypeErasedDataflowAnalysis` consistent. Differential Revision: https://reviews.llvm.org/D131014 Reviewed-by: ymandel, xazax.hun, gribozavr2 Added: Modified: clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp clang/unittests/Analysis/FlowSensitive/TestingSupport.h clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp index 8a945a514306..5ee1a0126b23 100644 --- a/clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/UncheckedOptionalAccessCheck.cpp @@ -59,10 +59,11 @@ analyzeFunction(const FunctionDecl &FuncDecl, ASTContext &ASTCtx) { BlockToOutputState = dataflow::runDataflowAnalysis( *Context, Analysis, Env, [&ASTCtx, &Diagnoser, &Diagnostics]( - const Stmt *Stmt, + const CFGStmt &Stmt, const DataflowAnalysisState<UncheckedOptionalAccessModel::Lattice> &State) mutable { - auto StmtDiagnostics = Diagnoser.diagnose(ASTCtx, Stmt, State.Env); + auto StmtDiagnostics = + Diagnoser.diagnose(ASTCtx, Stmt.getStmt(), State.Env); llvm::move(StmtDiagnostics, std::back_inserter(Diagnostics)); }); if (!BlockToOutputState) diff --git a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h index a8785c554eb2..c7903fd7ee89 100644 --- a/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h +++ b/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysis.h @@ -125,14 +125,14 @@ llvm::Expected<std::vector< runDataflowAnalysis( const ControlFlowContext &CFCtx, AnalysisT &Analysis, const Environment &InitEnv, - std::function<void(const Stmt *, const DataflowAnalysisState< - typename AnalysisT::Lattice> &)> + std::function<void(const CFGStmt &, const DataflowAnalysisState< + typename AnalysisT::Lattice> &)> PostVisitStmt = nullptr) { - std::function<void(const Stmt *, const TypeErasedDataflowAnalysisState &)> + std::function<void(const CFGStmt &, const TypeErasedDataflowAnalysisState &)> PostVisitStmtClosure = nullptr; if (PostVisitStmt != nullptr) { PostVisitStmtClosure = [&PostVisitStmt]( - const Stmt *Stmt, + const CFGStmt &Stmt, const TypeErasedDataflowAnalysisState &State) { auto *Lattice = llvm::any_cast<typename AnalysisT::Lattice>(&State.Lattice.Value); diff --git a/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h b/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h index 3a108402ab15..c563a2cd076b 100644 --- a/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h +++ b/clang/include/clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h @@ -138,7 +138,8 @@ llvm::Expected<std::vector<llvm::Optional<TypeErasedDataflowAnalysisState>>> runTypeErasedDataflowAnalysis( const ControlFlowContext &CFCtx, TypeErasedDataflowAnalysis &Analysis, const Environment &InitEnv, - std::function<void(const Stmt *, const TypeErasedDataflowAnalysisState &)> + std::function<void(const CFGStmt &, + const TypeErasedDataflowAnalysisState &)> PostVisitStmt = nullptr); } // namespace dataflow diff --git a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp index fbb521763ee6..f1c25f815935 100644 --- a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp +++ b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp @@ -333,7 +333,8 @@ llvm::Expected<std::vector<llvm::Optional<TypeErasedDataflowAnalysisState>>> runTypeErasedDataflowAnalysis( const ControlFlowContext &CFCtx, TypeErasedDataflowAnalysis &Analysis, const Environment &InitEnv, - std::function<void(const Stmt *, const TypeErasedDataflowAnalysisState &)> + std::function<void(const CFGStmt &, + const TypeErasedDataflowAnalysisState &)> PostVisitStmt) { PostOrderCFGView POV(&CFCtx.getCFG()); ForwardDataflowWorklist Worklist(CFCtx.getCFG(), &POV); @@ -398,12 +399,9 @@ runTypeErasedDataflowAnalysis( // Skip blocks that were not evaluated. if (!BlockStates[Block->getBlockID()]) continue; - transferBlock( - CFCtx, BlockStates, *Block, InitEnv, Analysis, - [&PostVisitStmt](const clang::CFGStmt &Stmt, - const TypeErasedDataflowAnalysisState &State) { - PostVisitStmt(Stmt.getStmt(), State); - }); + + transferBlock(CFCtx, BlockStates, *Block, InitEnv, Analysis, + PostVisitStmt); } } diff --git a/clang/unittests/Analysis/FlowSensitive/TestingSupport.h b/clang/unittests/Analysis/FlowSensitive/TestingSupport.h index 8cb500853608..f09d5f9db21a 100644 --- a/clang/unittests/Analysis/FlowSensitive/TestingSupport.h +++ b/clang/unittests/Analysis/FlowSensitive/TestingSupport.h @@ -76,7 +76,7 @@ llvm::Error checkDataflow( llvm::StringRef Code, ast_matchers::internal::Matcher<FunctionDecl> TargetFuncMatcher, std::function<AnalysisT(ASTContext &, Environment &)> MakeAnalysis, - std::function<void(ASTContext &, const Stmt *, + std::function<void(ASTContext &, const CFGStmt &, const TypeErasedDataflowAnalysisState &)> PostVisitStmt, std::function<void(AnalysisData)> VerifyResults, ArrayRef<std::string> Args, @@ -112,11 +112,11 @@ llvm::Error checkDataflow( Environment Env(DACtx, *F); auto Analysis = MakeAnalysis(Context, Env); - std::function<void(const Stmt *, const TypeErasedDataflowAnalysisState &)> + std::function<void(const CFGStmt &, const TypeErasedDataflowAnalysisState &)> PostVisitStmtClosure = nullptr; if (PostVisitStmt != nullptr) { PostVisitStmtClosure = [&PostVisitStmt, &Context]( - const Stmt *Stmt, + const CFGStmt &Stmt, const TypeErasedDataflowAnalysisState &State) { PostVisitStmt(Context, Stmt, State); }; diff --git a/clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp b/clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp index 63f8ed344c06..b21406e584b3 100644 --- a/clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp +++ b/clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp @@ -1245,9 +1245,10 @@ class UncheckedOptionalAccessTest return UncheckedOptionalAccessModel(Ctx, Options); }, [&Diagnostics, Diagnoser = UncheckedOptionalAccessDiagnoser(Options)]( - ASTContext &Ctx, const Stmt *Stmt, + ASTContext &Ctx, const CFGStmt &Stmt, const TypeErasedDataflowAnalysisState &State) mutable { - auto StmtDiagnostics = Diagnoser.diagnose(Ctx, Stmt, State.Env); + auto StmtDiagnostics = + Diagnoser.diagnose(Ctx, Stmt.getStmt(), State.Env); llvm::move(StmtDiagnostics, std::back_inserter(Diagnostics)); }, [&Diagnostics](AnalysisData AnalysisData) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits