https://github.com/tigbr updated https://github.com/llvm/llvm-project/pull/138295
>From faf0d6120ae1dd8b411e29d51cff344a9d042cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20T=C3=B3thv=C3=A1ri?= <gabor.tothv...@ericsson.com> Date: Sun, 20 Apr 2025 23:23:43 +0200 Subject: [PATCH 1/2] [clang][analyzer][NFC] Improve Clang Static Analyzer performance. Pass in separate BumpPtrAllocators to the different data structures in the analyzer, instead of reusing the BumpPtrAllocator of the ExplodedGraph everywhere, to gain a measurable speedup in analysis. --- .../Core/PathSensitive/CoreEngine.h | 3 ++- .../Core/PathSensitive/ExprEngine.h | 4 +++- .../Core/PathSensitive/ProgramState.h | 2 +- .../Core/PathSensitive/SValBuilder.h | 13 +++++++---- clang/lib/StaticAnalyzer/Core/CoreEngine.cpp | 4 ++-- clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | 11 +++++---- .../lib/StaticAnalyzer/Core/ProgramState.cpp | 8 +++---- clang/lib/StaticAnalyzer/Core/SValBuilder.cpp | 13 +++++++---- .../StaticAnalyzer/Core/SimpleSValBuilder.cpp | 23 +++++++++++++------ .../Frontend/AnalysisConsumer.cpp | 5 +++- 10 files changed, 55 insertions(+), 31 deletions(-) diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h index 80b79fd4e928f..6b6a28902092e 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h @@ -138,7 +138,8 @@ class CoreEngine { /// Construct a CoreEngine object to analyze the provided CFG. CoreEngine(ExprEngine &exprengine, FunctionSummariesTy *FS, - AnalyzerOptions &Opts); + AnalyzerOptions &Opts, + llvm::BumpPtrAllocator &BlockCounterFactoryAllocator); CoreEngine(const CoreEngine &) = delete; CoreEngine &operator=(const CoreEngine &) = delete; diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h index 20c446e33ef9a..4d10335d5a1fb 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h @@ -181,7 +181,9 @@ class ExprEngine { public: ExprEngine(cross_tu::CrossTranslationUnitContext &CTU, AnalysisManager &mgr, SetOfConstDecls *VisitedCalleesIn, - FunctionSummariesTy *FS, InliningModes HowToInlineIn); + FunctionSummariesTy *FS, InliningModes HowToInlineIn, + std::array<llvm::BumpPtrAllocator, 7> &ProgramStateAllocators, + llvm::BumpPtrAllocator &BlockCounterFactoryAllocator); virtual ~ExprEngine() = default; diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h index a20516b003c7d..a8403d170e896 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h @@ -530,7 +530,7 @@ class ProgramStateManager { ProgramStateManager(ASTContext &Ctx, StoreManagerCreator CreateStoreManager, ConstraintManagerCreator CreateConstraintManager, - llvm::BumpPtrAllocator& alloc, + std::array<llvm::BumpPtrAllocator, 7> &Allocators, ExprEngine *expreng); ~ProgramStateManager(); diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h index 54430d426a82a..904718eae1843 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h @@ -76,8 +76,10 @@ class SValBuilder { const unsigned ArrayIndexWidth; public: - SValBuilder(llvm::BumpPtrAllocator &alloc, ASTContext &context, - ProgramStateManager &stateMgr); + SValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, + ASTContext &context, ProgramStateManager &stateMgr); virtual ~SValBuilder() = default; @@ -409,9 +411,10 @@ class SValBuilder { const StackFrameContext *SFC); }; -SValBuilder* createSimpleSValBuilder(llvm::BumpPtrAllocator &alloc, - ASTContext &context, - ProgramStateManager &stateMgr); +SValBuilder* createSimpleSValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, + ASTContext &context, ProgramStateManager &stateMgr); } // namespace ento diff --git a/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp b/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp index bf1fd7c2356dc..9fa0211abbbbc 100644 --- a/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp @@ -75,10 +75,10 @@ static std::unique_ptr<WorkList> generateWorkList(AnalyzerOptions &Opts) { } CoreEngine::CoreEngine(ExprEngine &exprengine, FunctionSummariesTy *FS, - AnalyzerOptions &Opts) + AnalyzerOptions &Opts, llvm::BumpPtrAllocator &BlockCounterFactoryAllocator) : ExprEng(exprengine), WList(generateWorkList(Opts)), CTUWList(Opts.IsNaiveCTUEnabled ? generateWorkList(Opts) : nullptr), - BCounterFactory(G.getAllocator()), FunctionSummaries(FS) {} + BCounterFactory(BlockCounterFactoryAllocator), FunctionSummaries(FS) {} void CoreEngine::setBlockCounter(BlockCounter C) { WList->setBlockCounter(C); diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp index 69cf2dd6fc14e..af410ec5fea5d 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -221,12 +221,15 @@ static const char* TagProviderName = "ExprEngine"; ExprEngine::ExprEngine(cross_tu::CrossTranslationUnitContext &CTU, AnalysisManager &mgr, SetOfConstDecls *VisitedCalleesIn, - FunctionSummariesTy *FS, InliningModes HowToInlineIn) + FunctionSummariesTy *FS, InliningModes HowToInlineIn, + std::array<llvm::BumpPtrAllocator, 7> &ProgramStateAllocators, + llvm::BumpPtrAllocator& BlockCounterFactoryAllocator) : CTU(CTU), IsCTUEnabled(mgr.getAnalyzerOptions().IsNaiveCTUEnabled), AMgr(mgr), AnalysisDeclContexts(mgr.getAnalysisDeclContextManager()), - Engine(*this, FS, mgr.getAnalyzerOptions()), G(Engine.getGraph()), - StateMgr(getContext(), mgr.getStoreManagerCreator(), - mgr.getConstraintManagerCreator(), G.getAllocator(), this), + Engine(*this, FS, mgr.getAnalyzerOptions(), BlockCounterFactoryAllocator), + G(Engine.getGraph()), + StateMgr(getContext(), mgr.getStoreManagerCreator(), mgr.getConstraintManagerCreator(), + ProgramStateAllocators, this), SymMgr(StateMgr.getSymbolManager()), MRMgr(StateMgr.getRegionManager()), svalBuilder(StateMgr.getSValBuilder()), ObjCNoRet(mgr.getASTContext()), BR(mgr, *this), VisitedCallees(VisitedCalleesIn), diff --git a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp index 34ab2388cbd2f..a7709d6fc62b7 100644 --- a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp +++ b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp @@ -72,11 +72,11 @@ int64_t ProgramState::getID() const { ProgramStateManager::ProgramStateManager(ASTContext &Ctx, StoreManagerCreator CreateSMgr, ConstraintManagerCreator CreateCMgr, - llvm::BumpPtrAllocator &alloc, + std::array<llvm::BumpPtrAllocator, 7> &Allocators, ExprEngine *ExprEng) - : Eng(ExprEng), EnvMgr(alloc), GDMFactory(alloc), - svalBuilder(createSimpleSValBuilder(alloc, Ctx, *this)), - CallEventMgr(new CallEventManager(alloc)), Alloc(alloc) { + : Eng(ExprEng), EnvMgr(Allocators[0]), GDMFactory(Allocators[1]), + svalBuilder(createSimpleSValBuilder(Allocators[2], Allocators[3], Allocators[4], Ctx, *this)), + CallEventMgr(new CallEventManager(Allocators[5])), Alloc(Allocators[6]) { StoreMgr = (*CreateSMgr)(*this); ConstraintMgr = (*CreateCMgr)(*this, ExprEng); } diff --git a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp index 4f45b24be86c1..c1710df46d22c 100644 --- a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp @@ -49,13 +49,16 @@ using namespace ento; void SValBuilder::anchor() {} -SValBuilder::SValBuilder(llvm::BumpPtrAllocator &alloc, ASTContext &context, +SValBuilder::SValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, + ASTContext &context, ProgramStateManager &stateMgr) - : Context(context), BasicVals(context, alloc), - SymMgr(context, BasicVals, alloc), MemMgr(context, alloc), + : Context(context), BasicVals(context, BasicValueFactoryAllocator), + SymMgr(context, BasicVals, SymbolManagerAllocator), + MemMgr(context, MemRegionManagerAllocator), StateMgr(stateMgr), - AnOpts( - stateMgr.getOwningEngine().getAnalysisManager().getAnalyzerOptions()), + AnOpts(stateMgr.getOwningEngine().getAnalysisManager().getAnalyzerOptions()), ArrayIndexTy(context.LongLongTy), ArrayIndexWidth(context.getTypeSize(ArrayIndexTy)) {} diff --git a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp index afb0273d23bd4..32022bd4d8e62 100644 --- a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp @@ -64,9 +64,14 @@ class SimpleSValBuilder : public SValBuilder { SVal simplifySValOnce(ProgramStateRef State, SVal V); public: - SimpleSValBuilder(llvm::BumpPtrAllocator &alloc, ASTContext &context, - ProgramStateManager &stateMgr) - : SValBuilder(alloc, context, stateMgr) {} + SimpleSValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, + ASTContext &context, ProgramStateManager &stateMgr) + : SValBuilder(BasicValueFactoryAllocator, + SymbolManagerAllocator, + MemRegionManagerAllocator, + context, stateMgr) {} ~SimpleSValBuilder() override {} SVal evalBinOpNN(ProgramStateRef state, BinaryOperator::Opcode op, @@ -98,10 +103,14 @@ class SimpleSValBuilder : public SValBuilder { }; } // end anonymous namespace -SValBuilder *ento::createSimpleSValBuilder(llvm::BumpPtrAllocator &alloc, - ASTContext &context, - ProgramStateManager &stateMgr) { - return new SimpleSValBuilder(alloc, context, stateMgr); +SValBuilder *ento::createSimpleSValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, + ASTContext &context, ProgramStateManager &stateMgr) { + return new SimpleSValBuilder(BasicValueFactoryAllocator, + SymbolManagerAllocator, + MemRegionManagerAllocator, + context, stateMgr); } // Checks if the negation the value and flipping sign preserve diff --git a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 189d7d6bede8e..1e0030a339ef3 100644 --- a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -752,7 +752,10 @@ void AnalysisConsumer::RunPathSensitiveChecks(Decl *D, if (!Mgr->getAnalysisDeclContext(D)->getAnalysis<RelaxedLiveVariables>()) return; - ExprEngine Eng(CTU, *Mgr, VisitedCallees, &FunctionSummaries, IMode); + std::array<llvm::BumpPtrAllocator, 7> ProgramStateManagerAllocators; + llvm::BumpPtrAllocator BlockCounterFactoryAllocator; + + ExprEngine Eng(CTU, *Mgr, VisitedCallees, &FunctionSummaries, IMode, ProgramStateManagerAllocators, BlockCounterFactoryAllocator); // Execute the worklist algorithm. llvm::TimeRecord ExprEngineStartTime; >From 9ef7466555c2f873721b446479dd3737f62f0170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20T=C3=B3thv=C3=A1ri?= <gabor.tothv...@ericsson.com> Date: Fri, 2 May 2025 18:06:30 +0200 Subject: [PATCH 2/2] Fix formatting. --- .../Core/PathSensitive/CoreEngine.h | 3 +-- .../Core/PathSensitive/ExprEngine.h | 4 ++-- .../Core/PathSensitive/ProgramState.h | 9 ++++----- .../Core/PathSensitive/SValBuilder.h | 9 +++++---- clang/lib/StaticAnalyzer/Core/CoreEngine.cpp | 3 ++- clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | 17 +++++++++-------- clang/lib/StaticAnalyzer/Core/ProgramState.cpp | 17 ++++++++--------- clang/lib/StaticAnalyzer/Core/SValBuilder.cpp | 9 ++++----- .../StaticAnalyzer/Core/SimpleSValBuilder.cpp | 18 ++++++++---------- .../Frontend/AnalysisConsumer.cpp | 3 ++- 10 files changed, 45 insertions(+), 47 deletions(-) diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h index 6b6a28902092e..c3fe488ef23f7 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h @@ -136,8 +136,7 @@ class CoreEngine { public: /// Construct a CoreEngine object to analyze the provided CFG. - CoreEngine(ExprEngine &exprengine, - FunctionSummariesTy *FS, + CoreEngine(ExprEngine &exprengine, FunctionSummariesTy *FS, AnalyzerOptions &Opts, llvm::BumpPtrAllocator &BlockCounterFactoryAllocator); diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h index 4d10335d5a1fb..5749927b61e77 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h @@ -180,8 +180,8 @@ class ExprEngine { public: ExprEngine(cross_tu::CrossTranslationUnitContext &CTU, AnalysisManager &mgr, - SetOfConstDecls *VisitedCalleesIn, - FunctionSummariesTy *FS, InliningModes HowToInlineIn, + SetOfConstDecls *VisitedCalleesIn, FunctionSummariesTy *FS, + InliningModes HowToInlineIn, std::array<llvm::BumpPtrAllocator, 7> &ProgramStateAllocators, llvm::BumpPtrAllocator &BlockCounterFactoryAllocator); diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h index a8403d170e896..a56adaf5de532 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h @@ -527,11 +527,10 @@ class ProgramStateManager { std::vector<ProgramState *> freeStates; public: - ProgramStateManager(ASTContext &Ctx, - StoreManagerCreator CreateStoreManager, - ConstraintManagerCreator CreateConstraintManager, - std::array<llvm::BumpPtrAllocator, 7> &Allocators, - ExprEngine *expreng); + ProgramStateManager(ASTContext &Ctx, StoreManagerCreator CreateStoreManager, + ConstraintManagerCreator CreateConstraintManager, + std::array<llvm::BumpPtrAllocator, 7> &Allocators, + ExprEngine *expreng); ~ProgramStateManager(); diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h index 904718eae1843..2cdff4e320a64 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h @@ -411,10 +411,11 @@ class SValBuilder { const StackFrameContext *SFC); }; -SValBuilder* createSimpleSValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, - llvm::BumpPtrAllocator &SymbolManagerAllocator, - llvm::BumpPtrAllocator &MemRegionManagerAllocator, - ASTContext &context, ProgramStateManager &stateMgr); +SValBuilder * +createSimpleSValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, + ASTContext &context, ProgramStateManager &stateMgr); } // namespace ento diff --git a/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp b/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp index 9fa0211abbbbc..338136bab52b0 100644 --- a/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp @@ -75,7 +75,8 @@ static std::unique_ptr<WorkList> generateWorkList(AnalyzerOptions &Opts) { } CoreEngine::CoreEngine(ExprEngine &exprengine, FunctionSummariesTy *FS, - AnalyzerOptions &Opts, llvm::BumpPtrAllocator &BlockCounterFactoryAllocator) + AnalyzerOptions &Opts, + llvm::BumpPtrAllocator &BlockCounterFactoryAllocator) : ExprEng(exprengine), WList(generateWorkList(Opts)), CTUWList(Opts.IsNaiveCTUEnabled ? generateWorkList(Opts) : nullptr), BCounterFactory(BlockCounterFactoryAllocator), FunctionSummaries(FS) {} diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp index af410ec5fea5d..17cbcc9b7117b 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -219,17 +219,18 @@ REGISTER_TRAIT_WITH_PROGRAMSTATE(PendingArrayDestruction, static const char* TagProviderName = "ExprEngine"; -ExprEngine::ExprEngine(cross_tu::CrossTranslationUnitContext &CTU, - AnalysisManager &mgr, SetOfConstDecls *VisitedCalleesIn, - FunctionSummariesTy *FS, InliningModes HowToInlineIn, - std::array<llvm::BumpPtrAllocator, 7> &ProgramStateAllocators, - llvm::BumpPtrAllocator& BlockCounterFactoryAllocator) +ExprEngine::ExprEngine( + cross_tu::CrossTranslationUnitContext &CTU, AnalysisManager &mgr, + SetOfConstDecls *VisitedCalleesIn, FunctionSummariesTy *FS, + InliningModes HowToInlineIn, + std::array<llvm::BumpPtrAllocator, 7> &ProgramStateAllocators, + llvm::BumpPtrAllocator &BlockCounterFactoryAllocator) : CTU(CTU), IsCTUEnabled(mgr.getAnalyzerOptions().IsNaiveCTUEnabled), AMgr(mgr), AnalysisDeclContexts(mgr.getAnalysisDeclContextManager()), Engine(*this, FS, mgr.getAnalyzerOptions(), BlockCounterFactoryAllocator), - G(Engine.getGraph()), - StateMgr(getContext(), mgr.getStoreManagerCreator(), mgr.getConstraintManagerCreator(), - ProgramStateAllocators, this), + G(Engine.getGraph()), + StateMgr(getContext(), mgr.getStoreManagerCreator(), + mgr.getConstraintManagerCreator(), ProgramStateAllocators, this), SymMgr(StateMgr.getSymbolManager()), MRMgr(StateMgr.getRegionManager()), svalBuilder(StateMgr.getSValBuilder()), ObjCNoRet(mgr.getASTContext()), BR(mgr, *this), VisitedCallees(VisitedCalleesIn), diff --git a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp index a7709d6fc62b7..66d7f69b512ae 100644 --- a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp +++ b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp @@ -69,19 +69,18 @@ int64_t ProgramState::getID() const { return getStateManager().Alloc.identifyKnownAlignedObject<ProgramState>(this); } -ProgramStateManager::ProgramStateManager(ASTContext &Ctx, - StoreManagerCreator CreateSMgr, - ConstraintManagerCreator CreateCMgr, - std::array<llvm::BumpPtrAllocator, 7> &Allocators, - ExprEngine *ExprEng) - : Eng(ExprEng), EnvMgr(Allocators[0]), GDMFactory(Allocators[1]), - svalBuilder(createSimpleSValBuilder(Allocators[2], Allocators[3], Allocators[4], Ctx, *this)), - CallEventMgr(new CallEventManager(Allocators[5])), Alloc(Allocators[6]) { +ProgramStateManager::ProgramStateManager( + ASTContext &Ctx, StoreManagerCreator CreateSMgr, + ConstraintManagerCreator CreateCMgr, + std::array<llvm::BumpPtrAllocator, 7> &Allocators, ExprEngine *ExprEng) + : Eng(ExprEng), EnvMgr(Allocators[0]), GDMFactory(Allocators[1]), + svalBuilder(createSimpleSValBuilder(Allocators[2], Allocators[3], + Allocators[4], Ctx, *this)), + CallEventMgr(new CallEventManager(Allocators[5])), Alloc(Allocators[6]) { StoreMgr = (*CreateSMgr)(*this); ConstraintMgr = (*CreateCMgr)(*this, ExprEng); } - ProgramStateManager::~ProgramStateManager() { for (GDMContextsTy::iterator I=GDMContexts.begin(), E=GDMContexts.end(); I!=E; ++I) diff --git a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp index c1710df46d22c..9c8348f78fad2 100644 --- a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp @@ -52,13 +52,12 @@ void SValBuilder::anchor() {} SValBuilder::SValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, llvm::BumpPtrAllocator &SymbolManagerAllocator, llvm::BumpPtrAllocator &MemRegionManagerAllocator, - ASTContext &context, - ProgramStateManager &stateMgr) + ASTContext &context, ProgramStateManager &stateMgr) : Context(context), BasicVals(context, BasicValueFactoryAllocator), SymMgr(context, BasicVals, SymbolManagerAllocator), - MemMgr(context, MemRegionManagerAllocator), - StateMgr(stateMgr), - AnOpts(stateMgr.getOwningEngine().getAnalysisManager().getAnalyzerOptions()), + MemMgr(context, MemRegionManagerAllocator), StateMgr(stateMgr), + AnOpts( + stateMgr.getOwningEngine().getAnalysisManager().getAnalyzerOptions()), ArrayIndexTy(context.LongLongTy), ArrayIndexWidth(context.getTypeSize(ArrayIndexTy)) {} diff --git a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp index 32022bd4d8e62..070e37959c8ea 100644 --- a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp @@ -68,10 +68,8 @@ class SimpleSValBuilder : public SValBuilder { llvm::BumpPtrAllocator &SymbolManagerAllocator, llvm::BumpPtrAllocator &MemRegionManagerAllocator, ASTContext &context, ProgramStateManager &stateMgr) - : SValBuilder(BasicValueFactoryAllocator, - SymbolManagerAllocator, - MemRegionManagerAllocator, - context, stateMgr) {} + : SValBuilder(BasicValueFactoryAllocator, SymbolManagerAllocator, + MemRegionManagerAllocator, context, stateMgr) {} ~SimpleSValBuilder() override {} SVal evalBinOpNN(ProgramStateRef state, BinaryOperator::Opcode op, @@ -103,14 +101,14 @@ class SimpleSValBuilder : public SValBuilder { }; } // end anonymous namespace -SValBuilder *ento::createSimpleSValBuilder(llvm::BumpPtrAllocator &BasicValueFactoryAllocator, - llvm::BumpPtrAllocator &SymbolManagerAllocator, - llvm::BumpPtrAllocator &MemRegionManagerAllocator, - ASTContext &context, ProgramStateManager &stateMgr) { +SValBuilder *ento::createSimpleSValBuilder( + llvm::BumpPtrAllocator &BasicValueFactoryAllocator, + llvm::BumpPtrAllocator &SymbolManagerAllocator, + llvm::BumpPtrAllocator &MemRegionManagerAllocator, ASTContext &context, + ProgramStateManager &stateMgr) { return new SimpleSValBuilder(BasicValueFactoryAllocator, SymbolManagerAllocator, - MemRegionManagerAllocator, - context, stateMgr); + MemRegionManagerAllocator, context, stateMgr); } // Checks if the negation the value and flipping sign preserve diff --git a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 1e0030a339ef3..a7470732ce851 100644 --- a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -755,7 +755,8 @@ void AnalysisConsumer::RunPathSensitiveChecks(Decl *D, std::array<llvm::BumpPtrAllocator, 7> ProgramStateManagerAllocators; llvm::BumpPtrAllocator BlockCounterFactoryAllocator; - ExprEngine Eng(CTU, *Mgr, VisitedCallees, &FunctionSummaries, IMode, ProgramStateManagerAllocators, BlockCounterFactoryAllocator); + ExprEngine Eng(CTU, *Mgr, VisitedCallees, &FunctionSummaries, IMode, + ProgramStateManagerAllocators, BlockCounterFactoryAllocator); // Execute the worklist algorithm. llvm::TimeRecord ExprEngineStartTime; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits