Modify the Indexer class so that it can return the TranslationUnit that internal
decls originated from.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77534 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Index/Indexer.cpp b/lib/Index/Indexer.cpp
index 08e367a..ddc22f7 100644
--- a/lib/Index/Indexer.cpp
+++ b/lib/Index/Indexer.cpp
@@ -16,6 +16,7 @@
 #include "clang/Index/Entity.h"
 #include "clang/Index/Handlers.h"
 #include "clang/Index/TranslationUnit.h"
+#include "clang/AST/DeclBase.h"
 using namespace clang;
 using namespace idx;
 
@@ -39,6 +40,7 @@
 
 void Indexer::IndexAST(TranslationUnit *TU) {
   assert(TU && "Passed null TranslationUnit");
+  CtxTUMap[&TU->getASTContext()] = TU;
   EntityIndexer Idx(TU, Map);
   Prog.FindEntities(TU->getASTContext(), Idx);
 }
@@ -46,8 +48,14 @@
 void Indexer::GetTranslationUnitsFor(Entity Ent,
                                      TranslationUnitHandler &Handler) {
   assert(Ent.isValid() && "Expected valid Entity");
-  assert(!Ent.isInternalToTU() &&
-         "Expected an Entity visible outside of its translation unit");
+
+  if (Ent.isInternalToTU()) {
+    Decl *D = Ent.getInternalDecl();
+    CtxTUMapTy::iterator I = CtxTUMap.find(&D->getASTContext());
+    if (I != CtxTUMap.end())
+      Handler.Handle(I->second);
+    return;
+  }
 
   MapTy::iterator I = Map.find(Ent);
   if (I == Map.end())