AnalysisManager.cpp revision c6238d2786cfd961b94580b3d3675a1b3ff0721c
13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz//===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===// 23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz// 33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz// The LLVM Compiler Infrastructure 43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz// 53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz// This file is distributed under the University of Illinois Open Source 63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz// License. See LICENSE.TXT for details. 73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz// 83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz//===----------------------------------------------------------------------===// 93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "clang/Checker/PathSensitive/AnalysisManager.h" 113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "clang/Index/Entity.h" 123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "clang/Index/Indexer.h" 133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzusing namespace clang; 153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzconst AnalysisContext * 173192633d4abe262d413e41feb871fe8deed409d8Jakob BornecrantzAnalysisManager::getAnalysisContextInAnotherTU(const Decl *D) { 183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz idx::Entity Ent = idx::Entity::get(const_cast<Decl *>(D), 193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz Idxer->getProgram()); 203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz FunctionDecl *FuncDef; 213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz idx::TranslationUnit *TU; 223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz llvm::tie(FuncDef, TU) = Idxer->getDefinitionFor(Ent); 233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (FuncDef == 0) 253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return 0; 263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // This AnalysisContext wraps function definition in another translation unit. 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // But it is still owned by the AnalysisManager associated with the current 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // translation unit. 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return AnaCtxMgr.getContext(FuncDef, TU); 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz