Index: Parse/ParseObjc.cpp =================================================================== --- Parse/ParseObjc.cpp (revision 46112) +++ Parse/ParseObjc.cpp (working copy) @@ -1239,20 +1239,21 @@ break; } - switch (Tok.getIdentifierInfo()->getObjCKeywordID()) { - case tok::objc_encode: - return ParsePostfixExpressionSuffix(ParseObjCEncodeExpression(AtLoc)); - case tok::objc_protocol: - return ParsePostfixExpressionSuffix(ParseObjCProtocolExpression(AtLoc)); - case tok::objc_selector: - return ParsePostfixExpressionSuffix(ParseObjCSelectorExpression(AtLoc)); - default: - Diag(AtLoc, diag::err_unexpected_at); - SkipUntil(tok::semi); - break; + if (Tok.getIdentifierInfo()) { + switch (Tok.getIdentifierInfo()->getObjCKeywordID()) { + case tok::objc_encode: + return ParsePostfixExpressionSuffix(ParseObjCEncodeExpression(AtLoc)); + case tok::objc_protocol: + return ParsePostfixExpressionSuffix(ParseObjCProtocolExpression(AtLoc)); + case tok::objc_selector: + return ParsePostfixExpressionSuffix(ParseObjCSelectorExpression(AtLoc)); + default: + break; + } } - - return 0; + + Diag(AtLoc, diag::err_unexpected_at); + return true; } /// objc-message-expr: