aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHReader.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-07-23 19:11:11 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-07-23 19:11:11 +0000
commit320198303df7c16950d83ae79c3f702b84badcf7 (patch)
tree04296f2796785541c5ddb347e31c84c3a8692707 /lib/Frontend/PCHReader.cpp
parentcdd209dd9eb22a33cc9017f6605375fd17c9e809 (diff)
PCH read/write for selector reference pool.
Finishes off radar 6507158. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109256 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r--lib/Frontend/PCHReader.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 1ccd851ae3..b4564885a8 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1630,6 +1630,13 @@ PCHReader::ReadPCHBlock(PerFileData &F) {
TotalSelectorsInMethodPool = Record[1];
break;
+ case pch::REFERENCED_SELECTOR_POOL: {
+ unsigned int numEl = Record[0]*2;
+ for (unsigned int i = 1; i <= numEl; i++)
+ F.ReferencedSelectorsData.push_back(Record[i]);
+ }
+ break;
+
case pch::PP_COUNTER_VALUE:
if (!Record.empty() && Listener)
Listener->ReadCounter(Record[0]);
@@ -3126,6 +3133,20 @@ void PCHReader::InitializeSema(Sema &S) {
for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I)
SemaObj->DynamicClasses.push_back(
cast<CXXRecordDecl>(GetDecl(DynamicClasses[I])));
+
+ // If there are @selector references added them to its pool. This is for
+ // implementation of -Wselector.
+ PerFileData &F = *Chain[0];
+ 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 =
+ SourceLocation::getFromRawEncoding(F.ReferencedSelectorsData[I++]);
+ SemaObj->ReferencedSelectors.insert(std::make_pair(Sel, SelLoc));
+ }
+ }
}
IdentifierInfo* PCHReader::get(const char *NameStart, const char *NameEnd) {