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