aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseExpr.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-27 04:18:06 +0000
committerChris Lattner <sabre@nondot.org>2009-03-27 04:18:06 +0000
commit9af5500f3f132f9a2f9abbe82113a7c7bb751472 (patch)
tree262b83444877ee284c509b5faa4507df10170370 /lib/Parse/ParseExpr.cpp
parent6fa9c38744b2332acf9f5a72658fa213f93158de (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.cpp20
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);
}