Clean up the rest of the local -> global declaration ID mappings
within the ASTReader (I hope).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135720 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h
index 60f2129..9841f87 100644
--- a/include/clang/Serialization/ASTReader.h
+++ b/include/clang/Serialization/ASTReader.h
@@ -514,6 +514,7 @@
 
   /// \brief Information about the contents of a DeclContext.
   struct DeclContextInfo {
+    PerFileData *F;
     void *NameLookupTableData; // a ASTDeclContextNameLookupTable.
     const serialization::KindDeclIDPair *LexicalDecls;
     unsigned NumLexicalDecls;
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index 74fbd6c..52669d7 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -719,7 +719,7 @@
     if (DataLen > 0) {
       llvm::SmallVector<uint32_t, 4> DeclIDs;
       for (; DataLen > 0; DataLen -= 4)
-        DeclIDs.push_back(ReadUnalignedLE32(d));
+        DeclIDs.push_back(Reader.getGlobalDeclID(F, ReadUnalignedLE32(d)));
       Reader.SetGloballyVisibleDecls(II, DeclIDs);
     }
 
@@ -2062,6 +2062,7 @@
 
     case TU_UPDATE_LEXICAL: {
       DeclContextInfo Info = {
+        &F,
         /* No visible information */ 0,
         reinterpret_cast<const KindDeclIDPair *>(BlobStart),
         BlobLen / sizeof(KindDeclIDPair)
@@ -2079,7 +2080,7 @@
                         ASTDeclContextNameLookupTrait(*this));
       if (ID == 1 && Context) { // Is it the TU?
         DeclContextInfo Info = {
-          Table, /* No lexical inforamtion */ 0, 0
+          &F, Table, /* No lexical inforamtion */ 0, 0
         };
         DeclContextOffsets[Context->getTranslationUnitDecl()].push_back(Info);
       } else
@@ -4121,9 +4122,7 @@
       if (isKindWeWant && !isKindWeWant((Decl::Kind)ID->first))
         continue;
       
-      // FIXME: Modules need to know whether this is already mapped to a 
-      // global ID or not.
-      Decl *D = GetDecl(ID->second);
+      Decl *D = GetLocalDecl(*I->F, ID->second);
       assert(D && "Null decl in lexical decls");
       Decls.push_back(D);
     }
@@ -4158,11 +4157,9 @@
     if (Pos == LookupTable->end())
       continue;
 
-    // FIXME: Modules need to know whether this is already mapped to a 
-    // global ID or not.
     ASTDeclContextNameLookupTrait::data_type Data = *Pos;
     for (; Data.first != Data.second; ++Data.first)
-      Decls.push_back(cast<NamedDecl>(GetDecl(*Data.first)));
+      Decls.push_back(GetLocalDeclAs<NamedDecl>(*I->F, *Data.first));
     break;
   }
 
@@ -4194,10 +4191,8 @@
           = *ItemI;
       ASTDeclContextNameLookupTrait::data_type Data = Val.second;
       Decls.clear();
-      // FIXME: Modules need to know whether this is already mapped to a 
-      // global ID or not.
       for (; Data.first != Data.second; ++Data.first)
-        Decls.push_back(cast<NamedDecl>(GetDecl(*Data.first)));
+        Decls.push_back(GetLocalDeclAs<NamedDecl>(*I->F, *Data.first));
       MaterializeVisibleDeclsForName(DC, Val.first, Decls);
     }
   }
@@ -4664,7 +4659,6 @@
   }
 
   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
-    // FIXME: Are these IDs local or global? It's not clear!
     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
     if (SemaObj) {
       if (SemaObj->TUScope) {
diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp
index 8132ed9..3d58f95 100644
--- a/lib/Serialization/ASTReaderDecl.cpp
+++ b/lib/Serialization/ASTReaderDecl.cpp
@@ -1688,6 +1688,7 @@
       DC->setHasExternalLexicalStorage(Offsets.first != 0);
       DC->setHasExternalVisibleStorage(Offsets.second != 0);
       DeclContextInfo Info;
+      Info.F = Loc.F;
       if (ReadDeclContextStorage(DeclsCursor, Offsets, Info))
         return 0;
       DeclContextInfos &Infos = DeclContextOffsets[DC];
@@ -1707,6 +1708,7 @@
       DeclContextVisibleUpdates &U = I->second;
       DeclContextInfos &Infos = DeclContextOffsets[DC];
       DeclContextInfo Info;
+      Info.F = Loc.F;
       Info.LexicalDecls = 0;
       Info.NumLexicalDecls = 0;
       for (DeclContextVisibleUpdates::iterator UI = U.begin(), UE = U.end();