diff options
| author | Artem Dergachev <artem.dergachev@gmail.com> | 2018-02-15 19:01:55 +0000 |
|---|---|---|
| committer | Artem Dergachev <artem.dergachev@gmail.com> | 2018-02-15 19:01:55 +0000 |
| commit | 5bb02f3c0209b53c10de63fd1c06b07eb5490e21 (patch) | |
| tree | 5ee4d0db62e643c4a847919b9f7b454290214077 /clang | |
| parent | 81631a2609b731bc7b4bf3cbd719d035e89ef1f4 (diff) | |
| download | bcm5719-llvm-5bb02f3c0209b53c10de63fd1c06b07eb5490e21.tar.gz bcm5719-llvm-5bb02f3c0209b53c10de63fd1c06b07eb5490e21.zip | |
[analyzer] NFC: Eliminate ParentMap lookup in mayInlineCallKind().
Don't look at the parent statement to figure out if the cxx-allocator-inlining
flag should kick in and prevent us from inlining the constructor within
a new-expression. We now have construction contexts for that purpose.
llvm-svn: 325278
Diffstat (limited to 'clang')
3 files changed, 9 insertions, 9 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h index a9423d4f029..ea81313a875 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h @@ -577,6 +577,12 @@ public: ExplodedNode *Pred, ProgramStateRef St, SVal TargetLV, SVal Val, const ProgramPointTag *tag = nullptr); + /// Return the CFG element corresponding to the worklist element + /// that is currently being processed by ExprEngine. + CFGElement getCurrentCFGElement() { + return (*currBldrCtx->getBlock())[currStmtIdx]; + } + /// \brief Create a new state in which the call return value is binded to the /// call origin expression. ProgramStateRef bindReturnValue(const CallEvent &Call, diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp index bdf5555b2e5..107debdd4c4 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp @@ -109,10 +109,7 @@ ExprEngine::getRegionForConstructedObject(const CXXConstructExpr *CE, // See if we're constructing an existing region by looking at the // current construction context. - const NodeBuilderContext &CurrBldrCtx = getBuilderContext(); - const CFGBlock *B = CurrBldrCtx.getBlock(); - const CFGElement &E = (*B)[currStmtIdx]; - if (auto CC = E.getAs<CFGConstructor>()) { + if (auto CC = getCurrentCFGElement().getAs<CFGConstructor>()) { if (const Stmt *TriggerStmt = CC->getTriggerStmt()) { if (const CXXNewExpr *CNE = dyn_cast<CXXNewExpr>(TriggerStmt)) { if (AMgr.getAnalyzerOptions().mayInlineCXXAllocator()) { diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp index 9f61861ae4f..d89d8f5bba7 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp @@ -15,7 +15,6 @@ #include "PrettyStackTraceLocationContext.h" #include "clang/AST/CXXInheritance.h" #include "clang/AST/DeclCXX.h" -#include "clang/AST/ParentMap.h" #include "clang/Analysis/Analyses/LiveVariables.h" #include "clang/StaticAnalyzer/Core/CheckerManager.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h" @@ -639,10 +638,8 @@ ExprEngine::mayInlineCallKind(const CallEvent &Call, const ExplodedNode *Pred, const CXXConstructExpr *CtorExpr = Ctor.getOriginExpr(); - // FIXME: ParentMap is slow and ugly. The callee should provide the - // necessary context. Ideally as part of the call event, or maybe as part of - // location context. - const Stmt *ParentExpr = CurLC->getParentMap().getParent(CtorExpr); + auto CC = getCurrentCFGElement().getAs<CFGConstructor>(); + const Stmt *ParentExpr = CC ? CC->getTriggerStmt() : nullptr; if (ParentExpr && isa<CXXNewExpr>(ParentExpr) && !Opts.mayInlineCXXAllocator()) |

