@@ -153,15 +153,21 @@ void UseDesignatedInitializersCheck::check(
153
153
continue ;
154
154
if (IgnoreMacros && InitExpr->getBeginLoc ().isMacroID ())
155
155
continue ;
156
- DiagnosticBuilder Diag =
157
- diag (InitExpr->getBeginLoc (),
158
- " use designated init expression to initialize field '%0'" );
159
- Diag << InitExpr->getSourceRange ();
160
156
const auto Designator = Designators[InitExpr->getBeginLoc ()];
161
- if (!Designator->empty () && Designator->front () == ' .' ) {
162
- Diag << Designator->substr (1 ); // Strip leading dot
163
- Diag << FixItHint::CreateInsertion (InitExpr->getBeginLoc (),
164
- (*Designator + " =" ).str ());
157
+ if (!Designator || Designator->empty ()) {
158
+ // There should always be a designator. If there's unexpectedly none, we
159
+ // at least report a generic diagnostic.
160
+ diag (InitExpr->getBeginLoc (), " use designated init expression" )
161
+ << InitExpr->getSourceRange ();
162
+ } else {
163
+ diag (InitExpr->getBeginLoc (),
164
+ " use designated init expression to initialize field '%0'" )
165
+ << InitExpr->getSourceRange ()
166
+ << (Designator->front () == ' .'
167
+ ? Designator->substr (1 ) // Strip leading dot
168
+ : *Designator)
169
+ << FixItHint::CreateInsertion (InitExpr->getBeginLoc (),
170
+ (*Designator + " =" ).str ());
165
171
}
166
172
}
167
173
}
0 commit comments