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

Reply via email to