Change the semantics for Entity.

Entity can now refer to declarations that are not visible outside the translation unit.
It is a wrapper of a pointer union, it's either a Decl* for declarations that don't
"cross" translation units, or an EntityImpl* which is associated with the specific "visible" Decl.

Included is a test case for handling fields across translation units.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76515 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/index-test/index-test.cpp b/tools/index-test/index-test.cpp
index 8fd871d..4516e31 100644
--- a/tools/index-test/index-test.cpp
+++ b/tools/index-test/index-test.cpp
@@ -151,10 +151,8 @@
     return;
   }
 
-  Entity *Ent = Entity::get(D, IdxProvider.getProgram());
-  // If there is no Entity associated with this Decl, it means that it's not
-  // visible to other translation units.
-  if (!Ent)
+  Entity Ent = Entity::get(D, IdxProvider.getProgram());
+  if (Ent.isInvalid() || Ent.isInternalToTU())
     return ProcessDecl(D);
 
   // Find the "same" Decl in other translation units and print information.
@@ -162,7 +160,7 @@
          I = IdxProvider.translation_units_begin(Ent),
          E = IdxProvider.translation_units_end(Ent); I != E; ++I) {
     TUnit *TU = static_cast<TUnit*>(*I);
-    Decl *OtherD = Ent->getDecl(TU->getASTContext());
+    Decl *OtherD = Ent.getDecl(TU->getASTContext());
     assert(OtherD && "Couldn't resolve Entity");
     ProcessDecl(OtherD);
   }