Fix Parser::ParseObjCTryStmt() to allow for trailing @-keyword statements/expressions.

This bug fix is the result of not having 2-token lookahead to recognize specific @-keywords.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46768 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Parse/ParseStmt.cpp b/Parse/ParseStmt.cpp
index 8559a3d..b6cd558 100644
--- a/Parse/ParseStmt.cpp
+++ b/Parse/ParseStmt.cpp
@@ -87,23 +87,7 @@
   case tok::at: // May be a @try or @throw statement
     {
       AtLoc = ConsumeToken();  // consume @
-      if (Tok.isObjCAtKeyword(tok::objc_try))
-        return ParseObjCTryStmt(AtLoc);
-      else if (Tok.isObjCAtKeyword(tok::objc_throw))
-        return ParseObjCThrowStmt(AtLoc);
-      else if (Tok.isObjCAtKeyword(tok::objc_synchronized))
-        return ParseObjCSynchronizedStmt(AtLoc);
-      ExprResult Res = ParseExpressionWithLeadingAt(AtLoc);
-      if (Res.isInvalid) {
-        // If the expression is invalid, skip ahead to the next semicolon. Not
-        // doing this opens us up to the possibility of infinite loops if
-        // ParseExpression does not consume any tokens.
-        SkipUntil(tok::semi);
-        return true;
-      }
-      // Otherwise, eat the semicolon.
-      ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
-      return Actions.ActOnExprStmt(Res.Val);
+      return ParseObjCAtStatement(AtLoc);
     }
 
   default: