aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Parse/ParseExpr.cpp2
-rw-r--r--test/Parser/cxx-throw.cpp3
2 files changed, 2 insertions, 3 deletions
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index c3a38b1fe2..20c55a1ea3 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -225,7 +225,7 @@ Parser::ParseExpressionWithLeadingAt(SourceLocation AtLoc) {
/// process of disambiguating between an expression and a declaration.
Parser::OwningExprResult
Parser::ParseExpressionWithLeadingExtension(SourceLocation ExtLoc) {
- OwningExprResult LHS(ParseAssignmentExpression());
+ OwningExprResult LHS(ParseCastExpression(false));
if (LHS.isInvalid()) return move(LHS);
LHS = Actions.ActOnUnaryOp(CurScope, ExtLoc, tok::kw___extension__,
diff --git a/test/Parser/cxx-throw.cpp b/test/Parser/cxx-throw.cpp
index 968ef469f9..bcc49ec1b4 100644
--- a/test/Parser/cxx-throw.cpp
+++ b/test/Parser/cxx-throw.cpp
@@ -10,7 +10,6 @@ void foo() {
throw 1;
throw;
1 ? throw : (void)42;
- // gcc doesn't parse the below, but we do
- __extension__ throw 1;
+ __extension__ throw 1; // expected-error {{expected expression}}
(void)throw; // expected-error {{expected expression}}
}