Move a Module's ReferencedSelectorsData into the ASTReader itself, so
that it accumulates referenced selectors from each of the modules/PCH
files as they are loaded. No actual functionality change, yet.
llvm-svn: 136356
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 4b4432e..0ae1f62 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -2196,7 +2196,14 @@
break;
case REFERENCED_SELECTOR_POOL:
- F.ReferencedSelectorsData.swap(Record);
+ if (!Record.empty()) {
+ for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
+ ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
+ Record[Idx++]));
+ ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
+ getRawEncoding());
+ }
+ }
break;
case PP_COUNTER_VALUE:
@@ -4349,12 +4356,6 @@
}
PreloadedDecls.clear();
- // FIXME: Do VTable uses and dynamic classes deserialize too much ?
- // Can we cut them down before writing them ?
-
- // If there were any dynamic classes declarations, deserialize them
- // and add them to Sema's vector of such declarations.
-
// Load the offsets of the declarations that Sema references.
// They will be lazily deserialized when needed.
if (!SemaDeclRefs.empty()) {
@@ -4365,19 +4366,16 @@
SemaObj->StdBadAlloc = SemaDeclRefs[1];
}
- for (Module *F = &ModuleMgr.getPrimaryModule(); F; F = F->NextInSource) {
-
- // If there are @selector references added them to its pool. This is for
- // implementation of -Wselector.
- if (!F->ReferencedSelectorsData.empty()) {
- unsigned int DataSize = F->ReferencedSelectorsData.size()-1;
- unsigned I = 0;
- while (I < DataSize) {
- Selector Sel = DecodeSelector(F->ReferencedSelectorsData[I++]);
- SourceLocation SelLoc = ReadSourceLocation(
- *F, F->ReferencedSelectorsData, I);
- SemaObj->ReferencedSelectors.insert(std::make_pair(Sel, SelLoc));
- }
+ // If there are @selector references added them to its pool. This is for
+ // implementation of -Wselector.
+ if (!ReferencedSelectorsData.empty()) {
+ unsigned int DataSize = ReferencedSelectorsData.size()-1;
+ unsigned I = 0;
+ while (I < DataSize) {
+ Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
+ SourceLocation SelLoc
+ = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
+ SemaObj->ReferencedSelectors.insert(std::make_pair(Sel, SelLoc));
}
}
@@ -4743,7 +4741,7 @@
return SelectorsLoaded[ID - 1];
}
-Selector ASTReader::GetExternalSelector(uint32_t ID) {
+Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
return DecodeSelector(ID);
}
@@ -4752,6 +4750,12 @@
return getTotalNumSelectors() + 1;
}
+serialization::SelectorID
+ASTReader::getGlobalSelectorID(Module &F, unsigned LocalID) const {
+ // FIXME: Perform local -> global remapping
+ return LocalID;
+}
+
DeclarationName
ASTReader::ReadDeclarationName(Module &F,
const RecordData &Record, unsigned &Idx) {