diff options
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 5 | ||||
-rw-r--r-- | lib/Frontend/PCHWriter.cpp | 10 |
2 files changed, 8 insertions, 7 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 4c3e248c64..78be893bc7 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -1750,14 +1750,15 @@ bool PCHReader::ReadSelectorBlock() { for (unsigned SelIdx = 0; SelIdx < NumSels; SelIdx++) { unsigned NumArgs = Record[Idx++]; KeyIdents.clear(); - if (NumArgs <= 1) { + if (NumArgs == 0) { + // If the number of arguments is 0, the we must have an Identifier. IdentifierInfo *II = DecodeIdentifierInfo(Record[Idx++]); assert(II && "DecodeIdentifierInfo returned 0"); KeyIdents.push_back(II); } else { + // For keyword selectors, the Identifier is optional (::: is legal!). for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { IdentifierInfo *II = DecodeIdentifierInfo(Record[Idx++]); - assert(II && "DecodeIdentifierInfo returned 0"); KeyIdents.push_back(II); } } diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 421c345e78..5a410b1cf8 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -1554,11 +1554,11 @@ void PCHWriter::WritePreprocessor(const Preprocessor &PP) { for (HeaderSearch::header_file_iterator I = HS.header_file_begin(), E = HS.header_file_end(); I != E; ++I) { - Record.push_back((*I).isImport); - Record.push_back((*I).DirInfo); - Record.push_back((*I).NumIncludes); - if ((*I).ControllingMacro) - AddIdentifierRef((*I).ControllingMacro, Record); + Record.push_back(I->isImport); + Record.push_back(I->DirInfo); + Record.push_back(I->NumIncludes); + if (I->ControllingMacro) + AddIdentifierRef(I->ControllingMacro, Record); else Record.push_back(0); Stream.EmitRecord(pch::PP_HEADER_FILE_INFO, Record); |