[clang] [Clang] Fix the trailing comma regression (PR #136273)
Younan Zhang via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 18 00:13:07 PDT 2025
https://github.com/zyn0217 created https://github.com/llvm/llvm-project/pull/136273
925e195 introduced a regression since which we started to accept invalid trailing commas in many expression lists where they're not allowed by the grammar. The issue came from the fact that an additional invalid state - previously handled by ParseExpressionList - was overlooked in that patch.
Fixes https://github.com/llvm/llvm-project/issues/136254
No release entry because I want to backport it.
>From b4ec040751eaa698a90f983a5c420a7ec216d9a6 Mon Sep 17 00:00:00 2001
From: Younan Zhang <zyn7109 at gmail.com>
Date: Fri, 18 Apr 2025 13:59:54 +0800
Subject: [PATCH] [Clang] Fix the trailing comma regression
925e195 introduced a regression since which we started to accept invalid
trailing commas in many expression lists where they're not allowed by
the grammar. The issue came from the fact that an additional invalid
state - previously handled by ParseExpressionList - was overlooked in
that patch.
---
clang/lib/Parse/ParseExpr.cpp | 3 ---
clang/test/Parser/recovery.cpp | 18 ++++++++++++++++++
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 0a22f7372a9f9..2282fbe04839e 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp
@@ -2239,8 +2239,6 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {
if (PP.isCodeCompletionReached() && !CalledSignatureHelp)
RunSignatureHelp();
LHS = ExprError();
- } else if (!HasError && HasTrailingComma) {
- Diag(Tok, diag::err_expected_expression);
} else if (LHS.isInvalid()) {
for (auto &E : ArgExprs)
Actions.CorrectDelayedTyposInExpr(E);
@@ -3750,7 +3748,6 @@ bool Parser::ParseExpressionList(SmallVectorImpl<Expr *> &Exprs,
if (Tok.is(tok::r_paren)) {
if (HasTrailingComma)
*HasTrailingComma = true;
- break;
}
}
if (SawError) {
diff --git a/clang/test/Parser/recovery.cpp b/clang/test/Parser/recovery.cpp
index 2fce67a52c6b6..261f5dc99bad4 100644
--- a/clang/test/Parser/recovery.cpp
+++ b/clang/test/Parser/recovery.cpp
@@ -222,3 +222,21 @@ void k() {
func(1, ); // expected-error {{expected expression}}
}
}
+
+namespace GH136254 {
+
+void call() {
+ [a(42, )]() {} (); // expected-error {{expected expression}}
+
+ int *b = new int(42, ); // expected-error {{expected expression}}
+
+ struct S {
+ int c;
+
+ S() : c(42, ) {} // expected-error {{expected expression}}
+ };
+
+ int d(42, ); // expected-error {{expected expression}}
+}
+
+}
More information about the cfe-commits
mailing list