[clang-tools-extra] [clang-tidy] Add null-checking in Use designated Initializer check (PR #220093)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 18 00:56:13 PDT 2026
https://github.com/GTaf updated https://github.com/llvm/llvm-project/pull/220093
>From f01e05f3408398ad0014deebf51e316589bd3d0d Mon Sep 17 00:00:00 2001
From: GTaf <auredu94 at gmail.com>
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 a702721a0d757..e5fa251e58e55 100644
--- a/clang-tools-extra/docs/ReleaseNotes.md
+++ b/clang-tools-extra/docs/ReleaseNotes.md
@@ -220,6 +220,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/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]
More information about the cfe-commits
mailing list