Fix a major bug in PCHReader::ReadSelectorBlock().

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
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 4c3e248..78be893 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1750,14 +1750,15 @@
       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);
           }
         }