From: Richard Smith Date: Fri, 5 Aug 2022 00:07:43 +0000 (-0700) Subject: Fix parsing of comma fold-expressions as the operand of a C-style cast. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=73b62f813550b602f189afc3a60b0b39ae89f16d;p=platform%2Fupstream%2Fllvm.git Fix parsing of comma fold-expressions as the operand of a C-style cast. --- diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index a6a946d..52d4938 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -3469,7 +3469,9 @@ Parser::ParseSimpleExpressionList(SmallVectorImpl &Exprs, Exprs.push_back(Expr.get()); - if (Tok.isNot(tok::comma)) + // We might be parsing the LHS of a fold-expression. If we reached the fold + // operator, stop. + if (Tok.isNot(tok::comma) || NextToken().is(tok::ellipsis)) return false; // Move to the next argument, remember where the comma was. diff --git a/clang/test/Parser/cxx1z-fold-expressions.cpp b/clang/test/Parser/cxx1z-fold-expressions.cpp index 93ee6f2..ac27111 100644 --- a/clang/test/Parser/cxx1z-fold-expressions.cpp +++ b/clang/test/Parser/cxx1z-fold-expressions.cpp @@ -41,7 +41,13 @@ template void as_operand_of_cast(int a, T ...t) { (int)(t + ... + undeclared_junk) + // expected-error {{undeclared}} (int)(... + undeclared_junk) + // expected-error {{undeclared}} expected-error {{does not contain any unexpanded}} (int)(undeclared_junk + ...) + // expected-error {{undeclared}} - (int)(a + ...); // expected-error {{does not contain any unexpanded}} + (int)(a + ...) + // expected-error {{does not contain any unexpanded}} + (int)(a, ...) + // expected-error {{does not contain any unexpanded}} + (int)(..., a) + // expected-error {{does not contain any unexpanded}} + (int)(a, ..., undeclared_junk) + // expected-error {{undeclared}} expected-error {{does not contain any unexpanded}} + (int)(t, ...) + + (int)(..., t) + + (int)(t, ..., a); } // fold-operator can be '>' or '>>'.