forked from OSchip/llvm-project
[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
This commit is contained in:
parent
81631a2609
commit
5bb02f3c02
|
@ -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,
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Reference in New Issue