AnalysisManager.cpp revision 4fed22cdd8bb7d98127853ebb3f42be66bf2ce59
1c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
2c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//
3c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//                     The LLVM Compiler Infrastructure
4c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//
5c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// This file is distributed under the University of Illinois Open Source
6c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// License. See LICENSE.TXT for details.
7c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//
8c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//===----------------------------------------------------------------------===//
9c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
109b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
11c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#include "clang/Index/Entity.h"
12c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#include "clang/Index/Indexer.h"
13c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
14c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xuusing namespace clang;
159ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenekusing namespace ento;
16c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
174fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted KremenekAnalysisManager::AnalysisManager(ASTContext &ctx, Diagnostic &diags,
184fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 const LangOptions &lang, PathDiagnosticClient *pd,
194fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 StoreManagerCreator storemgr,
204fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 ConstraintManagerCreator constraintmgr,
214fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 CheckerManager *checkerMgr,
224fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 idx::Indexer *idxer,
234fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 unsigned maxnodes, unsigned maxvisit,
244fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 bool vizdot, bool vizubi, bool purge,
254fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 bool eager, bool trim,
264fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 bool inlinecall, bool useUnoptimizedCFG,
274fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 bool addImplicitDtors, bool addInitializers,
284fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                                 bool eagerlyTrimEGraph)
294fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek  : AnaCtxMgr(useUnoptimizedCFG, addImplicitDtors, addInitializers),
304fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    Ctx(ctx), Diags(diags), LangInfo(lang), PD(pd),
314fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr),
324fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    CheckerMgr(checkerMgr), Idxer(idxer),
334fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    AScope(ScopeDecl), MaxNodes(maxnodes), MaxVisit(maxvisit),
344fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    VisualizeEGDot(vizdot), VisualizeEGUbi(vizubi), PurgeDead(purge),
354fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    EagerlyAssume(eager), TrimGraph(trim), InlineCall(inlinecall),
364fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek    EagerlyTrimEGraph(eagerlyTrimEGraph)
374fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek{
384fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek}
394fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek
4019b78d9e3dbbc27bbcbdd8c3017a00fe88849ecdZhongxing XuAnalysisContext *
41c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing XuAnalysisManager::getAnalysisContextInAnotherTU(const Decl *D) {
42c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  idx::Entity Ent = idx::Entity::get(const_cast<Decl *>(D),
43c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu                                     Idxer->getProgram());
44c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  FunctionDecl *FuncDef;
45c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  idx::TranslationUnit *TU;
46c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  llvm::tie(FuncDef, TU) = Idxer->getDefinitionFor(Ent);
47c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
48c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  if (FuncDef == 0)
49c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu    return 0;
50c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
51c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  // This AnalysisContext wraps function definition in another translation unit.
52c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  // But it is still owned by the AnalysisManager associated with the current
53c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  // translation unit.
54c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu  return AnaCtxMgr.getContext(FuncDef, TU);
55c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu}
56