1 //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" 11 #include "clang/Index/Entity.h" 12 #include "clang/Index/Indexer.h" 13 14 using namespace clang; 15 using namespace ento; 16 17 AnalysisManager::AnalysisManager(ASTContext &ctx, Diagnostic &diags, 18 const LangOptions &lang, PathDiagnosticClient *pd, 19 StoreManagerCreator storemgr, 20 ConstraintManagerCreator constraintmgr, 21 CheckerManager *checkerMgr, 22 idx::Indexer *idxer, 23 unsigned maxnodes, unsigned maxvisit, 24 bool vizdot, bool vizubi, bool purge, 25 bool eager, bool trim, 26 bool inlinecall, bool useUnoptimizedCFG, 27 bool addImplicitDtors, bool addInitializers, 28 bool eagerlyTrimEGraph) 29 : AnaCtxMgr(useUnoptimizedCFG, addImplicitDtors, addInitializers), 30 Ctx(ctx), Diags(diags), LangInfo(lang), PD(pd), 31 CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 32 CheckerMgr(checkerMgr), Idxer(idxer), 33 AScope(ScopeDecl), MaxNodes(maxnodes), MaxVisit(maxvisit), 34 VisualizeEGDot(vizdot), VisualizeEGUbi(vizubi), PurgeDead(purge), 35 EagerlyAssume(eager), TrimGraph(trim), InlineCall(inlinecall), 36 EagerlyTrimEGraph(eagerlyTrimEGraph) 37 { 38 AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 39 } 40 41 AnalysisContext * 42 AnalysisManager::getAnalysisContextInAnotherTU(const Decl *D) { 43 idx::Entity Ent = idx::Entity::get(const_cast<Decl *>(D), 44 Idxer->getProgram()); 45 FunctionDecl *FuncDef; 46 idx::TranslationUnit *TU; 47 llvm::tie(FuncDef, TU) = Idxer->getDefinitionFor(Ent); 48 49 if (FuncDef == 0) 50 return 0; 51 52 // This AnalysisContext wraps function definition in another translation unit. 53 // But it is still owned by the AnalysisManager associated with the current 54 // translation unit. 55 return AnaCtxMgr.getContext(FuncDef, TU); 56 } 57