@@ -47,7 +47,10 @@ struct Designators {
47
47
const auto Result = Designators.find (Location);
48
48
if (Result == Designators.end ())
49
49
return {};
50
- return Result->getSecond ();
50
+ const llvm::StringRef Designator = Result->getSecond ();
51
+ return (Designator.front () == ' .' ? Designator.substr (1 ) : Designator)
52
+ .trim (" \0 " ); // Trim NULL characters appearing on Windows in the
53
+ // name.
51
54
}
52
55
53
56
private:
@@ -136,9 +139,10 @@ void UseDesignatedInitializersCheck::check(
136
139
" use designated initializer list to initialize %0" );
137
140
Diag << Type << InitList->getSourceRange ();
138
141
for (const Stmt *InitExpr : *SyntacticInitList) {
139
- if (const auto Designator = Designators[InitExpr->getBeginLoc ()])
142
+ const auto Designator = Designators[InitExpr->getBeginLoc ()];
143
+ if (Designator && !Designator->empty ())
140
144
Diag << FixItHint::CreateInsertion (InitExpr->getBeginLoc (),
141
- (*Designator + " =" ).str ());
145
+ (" . " + *Designator + " =" ).str ());
142
146
}
143
147
}
144
148
diag (Type->getBeginLoc (), " aggregate type is defined here" ,
@@ -162,12 +166,9 @@ void UseDesignatedInitializersCheck::check(
162
166
} else {
163
167
diag (InitExpr->getBeginLoc (),
164
168
" use designated init expression to initialize field '%0'" )
165
- << InitExpr->getSourceRange ()
166
- << (Designator->front () == ' .'
167
- ? Designator->substr (1 ) // Strip leading dot
168
- : *Designator)
169
+ << InitExpr->getSourceRange () << *Designator
169
170
<< FixItHint::CreateInsertion (InitExpr->getBeginLoc (),
170
- (*Designator + " =" ).str ());
171
+ (" . " + *Designator + " =" ).str ());
171
172
}
172
173
}
173
174
}
0 commit comments