https://github.com/GTaf updated https://github.com/llvm/llvm-project/pull/220093
>From bc58258fc05e22196814b7baefcac76146be15ce Mon Sep 17 00:00:00 2001 From: GTaf <[email protected]> Date: Mon, 31 Aug 2026 23:28:23 +0200 Subject: [PATCH] [clang-tidy] Add null-checking in Use designated Initializer check --- .../UseDesignatedInitializersCheck.cpp | 2 +- clang-tools-extra/docs/ReleaseNotes.md | 4 ++++ ...ted-initializers-invalid-decl-no-crash.cpp | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers-invalid-decl-no-crash.cpp 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 633418a2abb98..2fa54573b3899 100644 --- a/clang-tools-extra/docs/ReleaseNotes.md +++ b/clang-tools-extra/docs/ReleaseNotes.md @@ -179,6 +179,10 @@ infrastructure are described first, followed by tool-specific sections. `std::initializer_list` constructor, as the braced form could select a different constructor. +- Fixed a crash in {doc}`modernize-use-designated-initializers + <clang-tidy/checks/modernize/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
