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 AnalysisContext * 18 AnalysisManager::getAnalysisContextInAnotherTU(const Decl *D) { 19 idx::Entity Ent = idx::Entity::get(const_cast<Decl *>(D), 20 Idxer->getProgram()); 21 FunctionDecl *FuncDef; 22 idx::TranslationUnit *TU; 23 llvm::tie(FuncDef, TU) = Idxer->getDefinitionFor(Ent); 24 25 if (FuncDef == 0) 26 return 0; 27 28 // This AnalysisContext wraps function definition in another translation unit. 29 // But it is still owned by the AnalysisManager associated with the current 30 // translation unit. 31 return AnaCtxMgr.getContext(FuncDef, TU); 32 } 33