diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-11-11 03:28:50 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-11-11 03:28:50 +0000 |
commit | ea97e36dfc4b3203a7490844e12c2450a170584c (patch) | |
tree | 686e9241901d77a869c8dc9d12efcce40f36b59a /clang/lib | |
parent | a0d5643610b8c9fd9f553e249181ed771e3cc2b2 (diff) | |
download | bcm5719-llvm-ea97e36dfc4b3203a7490844e12c2450a170584c.tar.gz bcm5719-llvm-ea97e36dfc4b3203a7490844e12c2450a170584c.zip |
Fix parsing of fold-expressions within a cast expression. We parse the
parenthesized expression a bit differently in this case, just in case the
commas have special meaning.
llvm-svn: 221661
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 6913de9fa19..f4eef811755 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -2203,24 +2203,30 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, Diag(Tok, diag::err_expected_lbrace_in_compound_literal); return ExprError(); } + } else if (Tok.is(tok::ellipsis) && + isFoldOperator(NextToken().getKind())) { + return ParseFoldExpression(ExprResult(), T); } else if (isTypeCast) { // Parse the expression-list. InMessageExpressionRAIIObject InMessage(*this, false); - + ExprVector ArgExprs; CommaLocsTy CommaLocs; if (!ParseSimpleExpressionList(ArgExprs, CommaLocs)) { + // FIXME: If we ever support comma expressions as operands to + // fold-expressions, we'll need to allow multiple ArgExprs here. + if (ArgExprs.size() == 1 && isFoldOperator(Tok.getKind()) && + NextToken().is(tok::ellipsis)) + return ParseFoldExpression(Result, T); + ExprType = SimpleExpr; Result = Actions.ActOnParenListExpr(OpenLoc, Tok.getLocation(), ArgExprs); } - } else if (Tok.is(tok::ellipsis) && - isFoldOperator(NextToken().getKind())) { - return ParseFoldExpression(ExprResult(), T); } else { InMessageExpressionRAIIObject InMessage(*this, false); - + Result = ParseExpression(MaybeTypeCast); ExprType = SimpleExpr; |