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

Reply via email to