From 4f2a71bcdbf61ea809a98fd13e2dfeb4146db2bc Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Sat, 25 Apr 2009 12:07:12 +0000 Subject: Fix a major bug in PCHReader::ReadSelectorBlock(). Also simplify some syntax in PCHWriter::WritePreprocessor(), suggested by Chris. llvm-svn: 70039 --- clang/lib/Frontend/PCHReader.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'clang/lib/Frontend/PCHReader.cpp') diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 4c3e248c64a..78be893bc70 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/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); } } -- cgit v1.2.3