Author: Peiqi Li Date: 2026-09-04T19:13:12+08:00 New Revision: 0abb55638843428fccd7a923e6126fcb74a69a51
URL: https://github.com/llvm/llvm-project/commit/0abb55638843428fccd7a923e6126fcb74a69a51 DIFF: https://github.com/llvm/llvm-project/commit/0abb55638843428fccd7a923e6126fcb74a69a51.diff LOG: [clang-tidy] Fix false positive in readability-trailing-comma (#220548) Use the syntactic form of an empty InitListExpr instead of falling back to the semantic form. Fixes #220222 Added: Modified: clang-tools-extra/clang-tidy/readability/TrailingCommaCheck.cpp clang-tools-extra/docs/ReleaseNotes.md clang-tools-extra/test/clang-tidy/checkers/readability/trailing-comma-cxx11.cpp Removed: ################################################################################ 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/docs/ReleaseNotes.md b/clang-tools-extra/docs/ReleaseNotes.md index c033512a84b59..bb3fe614f3564 100644 --- a/clang-tools-extra/docs/ReleaseNotes.md +++ b/clang-tools-extra/docs/ReleaseNotes.md @@ -233,10 +233,14 @@ infrastructure are described first, followed by tool-specific sections. option to allow customizing the set of ignored types. - Improved {doc}`readability-trailing-comma - <clang-tidy/checks/readability/trailing-comma>` check by fixing false - positives on designated initializers, where initializer lists synthesized - for intermediate subobjects caused the trailing comma of the enclosing - list to be incorrectly rewritten. + <clang-tidy/checks/readability/trailing-comma>` check: + + - Fixed false positives on designated initializers, where initializer lists + synthesized for intermediate subobjects caused the trailing comma of the + enclosing list to be incorrectly rewritten. + + - Fixed a false positive on empty brace initializers of types with default + member initializers. - Improved {doc}`readability-use-std-min-max <clang-tidy/checks/readability/use-std-min-max>` check by fixing spurious 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
