[clang-tools-extra] [clang-tidy] Avoid diagnosing std::array initializations for modernize-use-designated-initializers (PR #134774)
David Rivera via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 21 22:25:13 PDT 2025
https://github.com/RiverDave updated https://github.com/llvm/llvm-project/pull/134774
>From 5dc7aa51c52b2fd31c182af964152765bed72ec7 Mon Sep 17 00:00:00 2001
From: David Rivera <davidriverg at gmail.com>
Date: Mon, 7 Apr 2025 23:21:50 -0400
Subject: [PATCH] [clang-tidy] Avoid diagnosing std::array initializations for
modernize-use-designated-initializers
---
.../modernize/UseDesignatedInitializersCheck.cpp | 5 +++--
clang-tools-extra/docs/ReleaseNotes.rst | 4 ++++
.../modernize/use-designated-initializers.rst | 3 +++
.../modernize/use-designated-initializers.cpp | 15 +++++++++++++++
4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp
index 3132067f3d5ec..7ea9676b13ec0 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp
@@ -121,8 +121,9 @@ void UseDesignatedInitializersCheck::registerMatchers(MatchFinder *Finder) {
hasAnyBase(hasType(cxxRecordDecl(has(fieldDecl()))));
Finder->addMatcher(
initListExpr(
- hasType(cxxRecordDecl(RestrictToPODTypes ? isPOD() : isAggregate(),
- unless(HasBaseWithFields))
+ hasType(cxxRecordDecl(
+ RestrictToPODTypes ? isPOD() : isAggregate(),
+ unless(anyOf(HasBaseWithFields, hasName("::std::array"))))
.bind("type")),
IgnoreSingleElementAggregates ? hasMoreThanOneElement() : anything(),
unless(isFullyDesignated()))
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 761c1d3a80359..ba3774307e392 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -182,6 +182,10 @@ Changes in existing checks
``constexpr`` and ``static``` values on member initialization and by detecting
explicit casting of built-in types within member list initialization.
+- Improved :doc:`modernize-use-designated-initializers
+ <clang-tidy/checks/modernize/use-designated-initializers>` check by avoiding
+ diagnosing designated initializers for ``std::array`` initializations.
+
- Improved :doc:`modernize-use-ranges
<clang-tidy/checks/modernize/use-ranges>` check by updating suppress
warnings logic for ``nullptr`` in ``std::find``.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-designated-initializers.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-designated-initializers.rst
index f101cfc6f3a2b..62ea906d7a029 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-designated-initializers.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-designated-initializers.rst
@@ -54,6 +54,9 @@ Options
The value `false` specifies that even initializers for aggregate types with
only a single element should be checked. The default value is `true`.
+ ``std::array`` initializations are always excluded, as the type is a
+ standard library abstraction and not intended to be initialized with
+ designated initializers.
.. option:: RestrictToPODTypes
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers.cpp
index 048665b2e54ac..cdadeed5bd850 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers.cpp
@@ -209,3 +209,18 @@ struct S15{
S15(S14& d):d{d}{}
S14& d;
};
+
+//Issue #133715
+namespace std {
+ template<typename T, unsigned int N>
+ struct array {
+ T __elems[N];
+ };
+ template<typename T, typename... U>
+ array(T, U...) -> array<T, 1 + sizeof...(U)>;
+}
+
+std::array a{1,2,3};
+std::array<int,2> b{10, 11};
+using array = std::array<int, 2>;
+array c{10, 11};
More information about the cfe-commits
mailing list