Author: GTaf Date: 2026-09-19T21:08:16+08:00 New Revision: 8fef76f77072537ea9d124df3d95a90671a2c02d
URL: https://github.com/llvm/llvm-project/commit/8fef76f77072537ea9d124df3d95a90671a2c02d DIFF: https://github.com/llvm/llvm-project/commit/8fef76f77072537ea9d124df3d95a90671a2c02d.diff LOG: [clang-tidy] Add null-checking in Use designated Initializer check (#220093) Part of #219739 This null check should avoid null dereferencing crash in the Use designated Initializer check. AI has been used in this contribution to understand the code as I'm a beginner to the codebase. The problem understanding and proposed fix is mine. Added: clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers-invalid-decl-no-crash.cpp Modified: clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp clang-tools-extra/docs/ReleaseNotes.md Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp index 5874c061d299f..417776f62d75d 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp @@ -42,7 +42,7 @@ static constexpr bool StrictCppStandardComplianceDefault = true; static unsigned getNumberOfDesignated(const InitListExpr *SyntacticInitList) { return llvm::count_if(*SyntacticInitList, [](auto *InitExpr) { - return isa<DesignatedInitExpr>(InitExpr); + return llvm::isa_and_nonnull<DesignatedInitExpr>(InitExpr); }); } diff --git a/clang-tools-extra/docs/ReleaseNotes.md b/clang-tools-extra/docs/ReleaseNotes.md index 3373acbc1b4a1..0447458c147ad 100644 --- a/clang-tools-extra/docs/ReleaseNotes.md +++ b/clang-tools-extra/docs/ReleaseNotes.md @@ -228,6 +228,10 @@ infrastructure are described first, followed by tool-specific sections. `std::initializer_list` constructor, as the braced form could select a diff erent constructor. +- Fixed a crash in {doc}`modernize-use-designated-initializers + <clang-tidy/checks/modernize/use-designated-initializers>` when analyzing + malformed code with nested classes and ambiguous initializer. + - Fixed a crash in {doc}`modernize-use-noexcept <clang-tidy/checks/modernize/use-noexcept>` when analyzing malformed template code with an unparsed exception specification. diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers-invalid-decl-no-crash.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers-invalid-decl-no-crash.cpp new file mode 100644 index 0000000000000..8877ded5f0182 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers-invalid-decl-no-crash.cpp @@ -0,0 +1,19 @@ +// RUN: %check_clang_tidy -std=c++20-or-later -expect-clang-tidy-error %s modernize-use-designated-initializers %t -- -header-filter=.* + +struct S1 {int a1;}; + +struct S2 : S1 { + S2(const S1& a); +}; + +struct S3 { + S1 a; + S2 b; +}; + +struct S4 { + S3 c; +}; + +S4 s41{0, {0}}; +// CHECK-MESSAGES: :[[@LINE-1]]:11: error: no matching constructor for initialization of 'S2' [clang-diagnostic-error] _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
