https://github.com/voyager-jhk created 
https://github.com/llvm/llvm-project/pull/220548

Use the syntactic form of an empty InitListExpr instead of falling back to the 
semantic form.

Fixes #220222

>From 71a25567dbab571363ae52c9146375f3813797ed Mon Sep 17 00:00:00 2001
From: voyager-jhk <[email protected]>
Date: Wed, 2 Sep 2026 18:44:26 +0800
Subject: [PATCH] [clang-tidy] Fix false positive in readability-trailing-comma

Use the syntactic form of an empty InitListExpr instead of falling back to the 
semantic form.
---
 .../clang-tidy/readability/TrailingCommaCheck.cpp      |  6 ++++--
 .../checkers/readability/trailing-comma-cxx11.cpp      | 10 ++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/readability/TrailingCommaCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/TrailingCommaCheck.cpp
index cb1a33ba09233..d687980ed0999 100644
--- a/clang-tools-extra/clang-tidy/readability/TrailingCommaCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/TrailingCommaCheck.cpp
@@ -122,9 +122,11 @@ void TrailingCommaCheck::checkEnumDecl(const EnumDecl 
*Enum,
 void TrailingCommaCheck::checkInitListExpr(
     const InitListExpr *InitList, const MatchFinder::MatchResult &Result) {
   // We need to use non-empty syntactic form for correct source locations.
-  if (const InitListExpr *SynInitInitList = InitList->getSyntacticForm();
-      SynInitInitList && SynInitInitList->getNumInits() > 0)
+  if (const InitListExpr *SynInitInitList = InitList->getSyntacticForm()) {
+    if (SynInitInitList->getNumInits() == 0)
+      return;
     InitList = SynInitInitList;
+  }
 
   const bool IsSingleLine = isSingleLine(
       {InitList->getBeginLoc(), InitList->getEndLoc()}, *Result.SourceManager);
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/trailing-comma-cxx11.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/trailing-comma-cxx11.cpp
index 9f37db2c837c3..5d836b7727082 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/readability/trailing-comma-cxx11.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/trailing-comma-cxx11.cpp
@@ -54,3 +54,13 @@ struct PackSingle {
 
 PackSingle<int> p1;
 PackSingle<int, double, char> p3;
+
+struct WithDefault { int foo = 1; };
+void takesTwo(WithDefault, int);
+
+void emptyInitListWithDefaultMember() {
+  takesTwo(WithDefault{}, 1);
+  int a[] = {1,};
+  // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: initializer list should not 
have a trailing comma
+  // CHECK-FIXES: int a[] = {1};
+}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to