diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-07-23 19:11:11 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-07-23 19:11:11 +0000 |
commit | 320198303df7c16950d83ae79c3f702b84badcf7 (patch) | |
tree | 04296f2796785541c5ddb347e31c84c3a8692707 /lib/Frontend/PCHReader.cpp | |
parent | cdd209dd9eb22a33cc9017f6605375fd17c9e809 (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.cpp | 21 |
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) { |