diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-27 04:18:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-27 04:18:06 +0000 |
commit | 9af5500f3f132f9a2f9abbe82113a7c7bb751472 (patch) | |
tree | 262b83444877ee284c509b5faa4507df10170370 /lib/Parse/ParseExpr.cpp | |
parent | 6fa9c38744b2332acf9f5a72658fa213f93158de (diff) |
Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway
by changing blocks from being disabled in the parser to being disabled
in Sema.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67816 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseExpr.cpp')
-rw-r--r-- | lib/Parse/ParseExpr.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index c0b28775ce..913f9baff1 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -776,10 +776,7 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression, return ParseObjCAtExpression(AtLoc); } case tok::caret: - if (getLang().Blocks) - return ParsePostfixExpressionSuffix(ParseBlockLiteralExpression()); - Diag(Tok, diag::err_expected_expression); - return ExprError(); + return ParsePostfixExpressionSuffix(ParseBlockLiteralExpression()); case tok::l_square: // These can be followed by postfix-expr pieces. if (getLang().ObjC1) @@ -1344,18 +1341,17 @@ Parser::OwningExprResult Parser::ParseBlockLiteralExpression() { OwningExprResult Result(Actions, true); - if (Tok.is(tok::l_brace)) { - OwningStmtResult Stmt(ParseCompoundStatementBody()); - if (!Stmt.isInvalid()) { - Result = Actions.ActOnBlockStmtExpr(CaretLoc, move(Stmt), CurScope); - } else { - Actions.ActOnBlockError(CaretLoc, CurScope); - } - } else { + if (!Tok.is(tok::l_brace)) { // Saw something like: ^expr Diag(Tok, diag::err_expected_expression); return ExprError(); } + + OwningStmtResult Stmt(ParseCompoundStatementBody()); + if (!Stmt.isInvalid()) + Result = Actions.ActOnBlockStmtExpr(CaretLoc, move(Stmt), CurScope); + else + Actions.ActOnBlockError(CaretLoc, CurScope); return move(Result); } |