]> granicus.if.org Git - clang/commitdiff
Fix a major bug in PCHReader::ReadSelectorBlock().
authorSteve Naroff <snaroff@apple.com>
Sat, 25 Apr 2009 12:07:12 +0000 (12:07 +0000)
committerSteve Naroff <snaroff@apple.com>
Sat, 25 Apr 2009 12:07:12 +0000 (12:07 +0000)
Also simplify some syntax in PCHWriter::WritePreprocessor(), suggested by Chris.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70039 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/PCHReader.cpp
lib/Frontend/PCHWriter.cpp

index 4c3e248c64afd8031bd78a3ea9bfe29a318e0d0a..78be893bc70f61ae6d4d4b975046386c5fe8977e 100644 (file)
@@ -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);
           }
         }
index 421c345e78040c03ae281c0320422338b569efff..5a410b1cf860063622e5ce635f62ddbc8beabf9a 100644 (file)
@@ -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);