[clang-tools-extra] [clang-tidy] Fix false positive in readability-trailing-comma (PR #220548)
Peiqi Li via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 2 03:48:13 PDT 2026
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 <voyager.lpq at gmail.com>
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};
+}
More information about the cfe-commits
mailing list