summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorArtem Dergachev <artem.dergachev@gmail.com>2018-02-15 19:01:55 +0000
committerArtem Dergachev <artem.dergachev@gmail.com>2018-02-15 19:01:55 +0000
commit5bb02f3c0209b53c10de63fd1c06b07eb5490e21 (patch)
tree5ee4d0db62e643c4a847919b9f7b454290214077 /clang
parent81631a2609b731bc7b4bf3cbd719d035e89ef1f4 (diff)
downloadbcm5719-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')
-rw-r--r--clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h6
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp5
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp7
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())
OpenPOWER on IntegriCloud