diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Analysis/AnalysisDeclContext.cpp')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Analysis/AnalysisDeclContext.cpp | 86 |
1 files changed, 44 insertions, 42 deletions
diff --git a/contrib/llvm/tools/clang/lib/Analysis/AnalysisDeclContext.cpp b/contrib/llvm/tools/clang/lib/Analysis/AnalysisDeclContext.cpp index 465f0c3..90d4b13 100644 --- a/contrib/llvm/tools/clang/lib/Analysis/AnalysisDeclContext.cpp +++ b/contrib/llvm/tools/clang/lib/Analysis/AnalysisDeclContext.cpp @@ -28,8 +28,8 @@ #include "clang/Analysis/Support/BumpVector.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/raw_ostream.h" #include "llvm/Support/SaveAndRestore.h" +#include "llvm/Support/raw_ostream.h" using namespace clang; @@ -41,11 +41,11 @@ AnalysisDeclContext::AnalysisDeclContext(AnalysisDeclContextManager *Mgr, : Manager(Mgr), D(d), cfgBuildOptions(buildOptions), - forcedBlkExprs(0), + forcedBlkExprs(nullptr), builtCFG(false), builtCompleteCFG(false), - ReferencedBlockVars(0), - ManagedAnalyses(0) + ReferencedBlockVars(nullptr), + ManagedAnalyses(nullptr) { cfgBuildOptions.forcedBlkExprs = &forcedBlkExprs; } @@ -54,11 +54,11 @@ AnalysisDeclContext::AnalysisDeclContext(AnalysisDeclContextManager *Mgr, const Decl *d) : Manager(Mgr), D(d), - forcedBlkExprs(0), + forcedBlkExprs(nullptr), builtCFG(false), builtCompleteCFG(false), - ReferencedBlockVars(0), - ManagedAnalyses(0) + ReferencedBlockVars(nullptr), + ManagedAnalyses(nullptr) { cfgBuildOptions.forcedBlkExprs = &forcedBlkExprs; } @@ -68,7 +68,8 @@ AnalysisDeclContextManager::AnalysisDeclContextManager(bool useUnoptimizedCFG, bool addInitializers, bool addTemporaryDtors, bool synthesizeBodies, - bool addStaticInitBranch) + bool addStaticInitBranch, + bool addCXXNewAllocator) : SynthesizeBodies(synthesizeBodies) { cfgBuildOptions.PruneTriviallyFalseEdges = !useUnoptimizedCFG; @@ -76,12 +77,11 @@ AnalysisDeclContextManager::AnalysisDeclContextManager(bool useUnoptimizedCFG, cfgBuildOptions.AddInitializers = addInitializers; cfgBuildOptions.AddTemporaryDtors = addTemporaryDtors; cfgBuildOptions.AddStaticInitBranches = addStaticInitBranch; + cfgBuildOptions.AddCXXNewAllocator = addCXXNewAllocator; } void AnalysisDeclContextManager::clear() { - for (ContextMap::iterator I = Contexts.begin(), E = Contexts.end(); I!=E; ++I) - delete I->second; - Contexts.clear(); + llvm::DeleteContainerSeconds(Contexts); } static BodyFarm &getBodyFarm(ASTContext &C) { @@ -94,14 +94,21 @@ Stmt *AnalysisDeclContext::getBody(bool &IsAutosynthesized) const { if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { Stmt *Body = FD->getBody(); if (!Body && Manager && Manager->synthesizeBodies()) { - IsAutosynthesized = true; - return getBodyFarm(getASTContext()).getBody(FD); + Body = getBodyFarm(getASTContext()).getBody(FD); + if (Body) + IsAutosynthesized = true; } return Body; } - else if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) - return MD->getBody(); - else if (const BlockDecl *BD = dyn_cast<BlockDecl>(D)) + else if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) { + Stmt *Body = MD->getBody(); + if (!Body && Manager && Manager->synthesizeBodies()) { + Body = getBodyFarm(getASTContext()).getBody(MD); + if (Body) + IsAutosynthesized = true; + } + return Body; + } else if (const BlockDecl *BD = dyn_cast<BlockDecl>(D)) return BD->getBody(); else if (const FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(D)) @@ -126,15 +133,14 @@ const ImplicitParamDecl *AnalysisDeclContext::getSelfDecl() const { return MD->getSelfDecl(); if (const BlockDecl *BD = dyn_cast<BlockDecl>(D)) { // See if 'self' was captured by the block. - for (BlockDecl::capture_const_iterator it = BD->capture_begin(), - et = BD->capture_end(); it != et; ++it) { - const VarDecl *VD = it->getVariable(); + for (const auto &I : BD->captures()) { + const VarDecl *VD = I.getVariable(); if (VD->getName() == "self") return dyn_cast<ImplicitParamDecl>(VD); } } - return NULL; + return nullptr; } void AnalysisDeclContext::registerForcedBlockExpression(const Stmt *stmt) { @@ -183,6 +189,9 @@ CFG *AnalysisDeclContext::getCFG() { if (PM) addParentsForSyntheticStmts(cfg.get(), *PM); + + // The Observer should only observe one build of the CFG. + getCFGBuildOptions().Observer = nullptr; } return cfg.get(); } @@ -199,6 +208,9 @@ CFG *AnalysisDeclContext::getUnoptimizedCFG() { if (PM) addParentsForSyntheticStmts(completeCFG.get(), *PM); + + // The Observer should only observe one build of the CFG. + getCFGBuildOptions().Observer = nullptr; } return completeCFG.get(); } @@ -211,8 +223,8 @@ CFGStmtMap *AnalysisDeclContext::getCFGStmtMap() { cfgStmtMap.reset(CFGStmtMap::Build(c, &getParentMap())); return cfgStmtMap.get(); } - - return 0; + + return nullptr; } CFGReverseBlockReachabilityAnalysis *AnalysisDeclContext::getCFGReachablityAnalysis() { @@ -223,8 +235,8 @@ CFGReverseBlockReachabilityAnalysis *AnalysisDeclContext::getCFGReachablityAnaly CFA.reset(new CFGReverseBlockReachabilityAnalysis(*c)); return CFA.get(); } - - return 0; + + return nullptr; } void AnalysisDeclContext::dumpCFG(bool ShowColors) { @@ -235,10 +247,8 @@ ParentMap &AnalysisDeclContext::getParentMap() { if (!PM) { PM.reset(new ParentMap(getBody())); if (const CXXConstructorDecl *C = dyn_cast<CXXConstructorDecl>(getDecl())) { - for (CXXConstructorDecl::init_const_iterator I = C->init_begin(), - E = C->init_end(); - I != E; ++I) { - PM->addStmt((*I)->getInit()); + for (const auto *I : C->inits()) { + PM->addStmt(I->getInit()); } } if (builtCFG) @@ -391,7 +401,7 @@ const StackFrameContext *LocationContext::getCurrentStackFrame() const { return SFC; LC = LC->getParent(); } - return NULL; + return nullptr; } bool LocationContext::inTopFrame() const { @@ -435,7 +445,7 @@ void LocationContext::dumpStack(raw_ostream &OS, StringRef Indent) const { } } -void LocationContext::dumpStack() const { +LLVM_DUMP_METHOD void LocationContext::dumpStack() const { dumpStack(llvm::errs()); } @@ -454,11 +464,6 @@ public: BumpVectorContext &bc) : BEVals(bevals), BC(bc) {} - bool IsTrackedDecl(const VarDecl *VD) { - const DeclContext *DC = VD->getDeclContext(); - return IgnoredContexts.count(DC) == 0; - } - void VisitStmt(Stmt *S) { for (Stmt::child_range I = S->children(); I; ++I) if (Stmt *child = *I) @@ -506,9 +511,8 @@ static DeclVec* LazyInitializeReferencedDecls(const BlockDecl *BD, new (BV) DeclVec(BC, 10); // Go through the capture list. - for (BlockDecl::capture_const_iterator CI = BD->capture_begin(), - CE = BD->capture_end(); CI != CE; ++CI) { - BV->push_back(CI->getVariable(), BC); + for (const auto &CI : BD->captures()) { + BV->push_back(CI.getVariable(), BC); } // Find the referenced global/static variables. @@ -548,15 +552,13 @@ AnalysisDeclContext::~AnalysisDeclContext() { // Release the managed analyses. if (ManagedAnalyses) { ManagedAnalysisMap *M = (ManagedAnalysisMap*) ManagedAnalyses; - for (ManagedAnalysisMap::iterator I = M->begin(), E = M->end(); I!=E; ++I) - delete I->second; + llvm::DeleteContainerSeconds(*M); delete M; } } AnalysisDeclContextManager::~AnalysisDeclContextManager() { - for (ContextMap::iterator I = Contexts.begin(), E = Contexts.end(); I!=E; ++I) - delete I->second; + llvm::DeleteContainerSeconds(Contexts); } LocationContext::~LocationContext() {} |