@@ -212,6 +212,42 @@ void Diagnostic::setDiagnosticMapping(diag::kind Diag, diag::Mapping Map,
212
212
FullSourceLoc (Loc, *SourceMgr)));
213
213
}
214
214
215
+ void Diagnostic::Report (const StoredDiagnostic &storedDiag) {
216
+ assert (CurDiagID == ~0U && " Multiple diagnostics in flight at once!" );
217
+
218
+ CurDiagLoc = storedDiag.getLocation ();
219
+ CurDiagID = storedDiag.getID ();
220
+ NumDiagArgs = 0 ;
221
+
222
+ NumDiagRanges = storedDiag.range_size ();
223
+ assert (NumDiagRanges < sizeof (DiagRanges)/sizeof (DiagRanges[0 ]) &&
224
+ " Too many arguments to diagnostic!" );
225
+ unsigned i = 0 ;
226
+ for (StoredDiagnostic::range_iterator
227
+ RI = storedDiag.range_begin (),
228
+ RE = storedDiag.range_end (); RI != RE; ++RI)
229
+ DiagRanges[i++] = *RI;
230
+
231
+ NumFixItHints = storedDiag.fixit_size ();
232
+ assert (NumFixItHints < Diagnostic::MaxFixItHints && " Too many fix-it hints!" );
233
+ i = 0 ;
234
+ for (StoredDiagnostic::fixit_iterator
235
+ FI = storedDiag.fixit_begin (),
236
+ FE = storedDiag.fixit_end (); FI != FE; ++FI)
237
+ FixItHints[i++] = *FI;
238
+
239
+ assert (Client && " DiagnosticClient not set!" );
240
+ Level DiagLevel = storedDiag.getLevel ();
241
+ DiagnosticInfo Info (this , storedDiag.getMessage ());
242
+ Client->HandleDiagnostic (DiagLevel, Info);
243
+ if (Client->IncludeInDiagnosticCounts ()) {
244
+ if (DiagLevel == Diagnostic::Warning)
245
+ ++NumWarnings;
246
+ }
247
+
248
+ CurDiagID = ~0U ;
249
+ }
250
+
215
251
void DiagnosticBuilder::FlushCounts () {
216
252
DiagObj->NumDiagArgs = NumArgs;
217
253
DiagObj->NumDiagRanges = NumRanges;
@@ -486,6 +522,11 @@ static void HandlePluralModifier(const DiagnosticInfo &DInfo, unsigned ValNo,
486
522
// / array.
487
523
void DiagnosticInfo::
488
524
FormatDiagnostic (llvm::SmallVectorImpl<char > &OutStr) const {
525
+ if (!StoredDiagMessage.empty ()) {
526
+ OutStr.append (StoredDiagMessage.begin (), StoredDiagMessage.end ());
527
+ return ;
528
+ }
529
+
489
530
const char *DiagStr = getDiags ()->getDiagnosticIDs ()->getDescription (getID ());
490
531
const char *DiagEnd = DiagStr+strlen (DiagStr);
491
532
0 commit comments