Skip to content

Commit bcdcf47

Browse files
committed
Point to type to initialize
1 parent e74f84f commit bcdcf47

File tree

2 files changed

+43
-19
lines changed

2 files changed

+43
-19
lines changed

clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,21 @@ void UseDesignatedInitializersCheck::check(
110110
LazyDesignators()->size()) {
111111
return;
112112
}
113-
DiagnosticBuilder Diag =
114-
diag(InitList->getLBraceLoc(), "use designated initializer list");
115-
Diag << InitList->getSourceRange();
116-
for (const Stmt *InitExpr : *SyntacticInitList) {
117-
const std::string Designator =
118-
LazyDesignators()->at(InitExpr->getBeginLoc());
119-
if (!Designator.empty()) {
120-
Diag << FixItHint::CreateInsertion(InitExpr->getBeginLoc(),
121-
Designator + "=");
113+
{
114+
DiagnosticBuilder Diag =
115+
diag(InitList->getLBraceLoc(), "use designated initializer list");
116+
Diag << InitList->getSourceRange();
117+
for (const Stmt *InitExpr : *SyntacticInitList) {
118+
const std::string Designator =
119+
LazyDesignators()->at(InitExpr->getBeginLoc());
120+
if (!Designator.empty()) {
121+
Diag << FixItHint::CreateInsertion(InitExpr->getBeginLoc(),
122+
Designator + "=");
123+
}
122124
}
123125
}
126+
diag(Type->getBeginLoc(), "this is the type to initialize",
127+
DiagnosticIDs::Note);
124128
return;
125129
}
126130
for (const auto *InitExpr : *SyntacticInitList) {

clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers.cpp

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,16 @@ S2 s21{.i=1, .j =2};
2424

2525
S2 s22 = {1, 2};
2626
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
27-
// CHECK-MESSAGES-POD: :[[@LINE-2]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
27+
// CHECK-MESSAGES: :[[@LINE-6]]:1: note: this is the type to initialize
28+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
29+
// CHECK-MESSAGES-POD: :[[@LINE-8]]:1: note: this is the type to initialize
2830
// CHECK-FIXES: S2 s22 = {.i=1, .j=2};
2931

3032
S2 s23{1};
3133
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
32-
// CHECK-MESSAGES-POD: :[[@LINE-2]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
34+
// CHECK-MESSAGES: :[[@LINE-13]]:1: note: this is the type to initialize
35+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
36+
// CHECK-MESSAGES-POD: :[[@LINE-15]]:1: note: this is the type to initialize
3337
// CHECK-FIXES: S2 s23{.i=1};
3438

3539
S2 s24{.i = 1};
@@ -54,16 +58,20 @@ S3 s31 = {.s2 = 1, 2, 3.1};
5458

5559
S3 s32 = {{.i = 1, 2}};
5660
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
57-
// CHECK-MESSAGES: :[[@LINE-2]]:20: warning: use designated init expression [modernize-use-designated-initializers]
58-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
59-
// CHECK-MESSAGES-POD: :[[@LINE-4]]:20: warning: use designated init expression [modernize-use-designated-initializers]
61+
// CHECK-MESSAGES: :[[@LINE-15]]:1: note: this is the type to initialize
62+
// CHECK-MESSAGES: :[[@LINE-3]]:20: warning: use designated init expression [modernize-use-designated-initializers]
63+
// CHECK-MESSAGES-POD: :[[@LINE-4]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
64+
// CHECK-MESSAGES-POD: :[[@LINE-18]]:1: note: this is the type to initialize
65+
// CHECK-MESSAGES-POD: :[[@LINE-6]]:20: warning: use designated init expression [modernize-use-designated-initializers]
6066
// CHECK-FIXES: S3 s32 = {.s2={.i = 1, .j=2}};
6167

6268
S3 s33 = {{2}, .d=3.1};
6369
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use designated init expression [modernize-use-designated-initializers]
6470
// CHECK-MESSAGES: :[[@LINE-2]]:11: warning: use designated initializer list [modernize-use-designated-initializers]
65-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:11: warning: use designated init expression [modernize-use-designated-initializers]
66-
// CHECK-MESSAGES-POD: :[[@LINE-4]]:11: warning: use designated initializer list [modernize-use-designated-initializers]
71+
// CHECK-MESSAGES: :[[@LINE-50]]:1: note: this is the type to initialize
72+
// CHECK-MESSAGES-POD: :[[@LINE-4]]:11: warning: use designated init expression [modernize-use-designated-initializers]
73+
// CHECK-MESSAGES-POD: :[[@LINE-5]]:11: warning: use designated initializer list [modernize-use-designated-initializers]
74+
// CHECK-MESSAGES-POD: :[[@LINE-53]]:1: note: this is the type to initialize
6775
// CHECK-FIXES: S3 s33 = {.s2={.i=2}, .d=3.1};
6876

6977
struct S4 {
@@ -73,10 +81,12 @@ struct S4 {
7381

7482
S4 s41 {2.2};
7583
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
84+
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-7]]:1: note: this is the type to initialize
7685
// CHECK-FIXES-SINGLE-ELEMENT: S4 s41 {.d=2.2};
7786

7887
S4 s42 = {{}};
7988
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
89+
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-12]]:1: note: this is the type to initialize
8090
// CHECK-FIXES-SINGLE-ELEMENT: S4 s42 = {.d={}};
8191

8292
template<typename S> S template1() { return {10, 11}; }
@@ -98,7 +108,9 @@ struct S6 {
98108

99109
S6 s61 {1, 2};
100110
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
101-
// CHECK-MESSAGES-POD: :[[@LINE-2]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
111+
// CHECK-MESSAGES: :[[@LINE-7]]:1: note: this is the type to initialize
112+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
113+
// CHECK-MESSAGES-POD: :[[@LINE-9]]:1: note: this is the type to initialize
102114
// CHECK-FIXES: S6 s61 {.i=1, .s.j=2};
103115

104116
struct S7 {
@@ -110,6 +122,7 @@ struct S7 {
110122

111123
S7 s71 {1};
112124
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
125+
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-9]]:1: note: this is the type to initialize
113126
// CHECK-FIXES-SINGLE-ELEMENT: S7 s71 {.u.k=1};
114127

115128
struct S8: S7 { int i; };
@@ -123,6 +136,7 @@ struct S9 {
123136

124137
S9 s91{1, 2};
125138
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
139+
// CHECK-MESSAGES: :[[@LINE-7]]:1: note: this is the type to initialize
126140
// CHECK-FIXES: S9 s91{.i=1, .j=2};
127141

128142
struct S10 { int i = 1, j = 2; };
@@ -136,6 +150,7 @@ struct S11 { int i; S10 s10; };
136150
S11 s111 { .i = 1 };
137151
S11 s112 { 1 };
138152
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
153+
// CHECK-MESSAGES: :[[@LINE-5]]:1: note: this is the type to initialize
139154
// CHECK-FIXES: S11 s112 { .i=1 };
140155

141156
S11 s113 { .i=1, {}};
@@ -153,7 +168,9 @@ struct S12 {
153168

154169
S12 s121 {1, 2};
155170
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
156-
// CHECK-MESSAGES-POD: :[[@LINE-2]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
171+
// CHECK-MESSAGES: :[[@LINE-7]]:1: note: this is the type to initialize
172+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
173+
// CHECK-MESSAGES-POD: :[[@LINE-9]]:1: note: this is the type to initialize
157174
// CHECK-FIXES: S12 s121 {.i=1, .j=2};
158175

159176
struct S13 {
@@ -166,7 +183,9 @@ struct S13 {
166183

167184
S13 s131 {1, 2};
168185
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
169-
// CHECK-MESSAGES-POD: :[[@LINE-2]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
186+
// CHECK-MESSAGES: :[[@LINE-10]]:1: note: this is the type to initialize
187+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
188+
// CHECK-MESSAGES-POD: :[[@LINE-12]]:1: note: this is the type to initialize
170189
// CHECK-FIXES: S13 s131 {.k=1, .i=2};
171190

172191
#define A (3+2)
@@ -181,3 +200,4 @@ S9 s92 {A, B};
181200
DECLARE_S93;
182201
// CHECK-MESSAGES-MACROS: :[[@LINE-1]]:1: warning: use designated initializer list [modernize-use-designated-initializers]
183202
// CHECK-MESSAGES-MACROS: :[[@LINE-4]]:28: note: expanded from macro 'DECLARE_S93'
203+
// CHECK-MESSAGES-MACROS: :[[@LINE-71]]:1: note: this is the type to initialize

0 commit comments

Comments
 (0)