diff options
Diffstat (limited to 'clang/lib/Basic/Diagnostic.cpp')
-rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index 4a63d979335..a36f3ce38a1 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -357,7 +357,7 @@ void DiagnosticsEngine::Report(const StoredDiagnostic &storedDiag) { NumDiagArgs = 0; NumDiagRanges = storedDiag.range_size(); - assert(NumDiagRanges < sizeof(DiagRanges)/sizeof(DiagRanges[0]) && + assert(NumDiagRanges < DiagnosticsEngine::MaxRanges && "Too many arguments to diagnostic!"); unsigned i = 0; for (StoredDiagnostic::range_iterator @@ -365,11 +365,13 @@ void DiagnosticsEngine::Report(const StoredDiagnostic &storedDiag) { RE = storedDiag.range_end(); RI != RE; ++RI) DiagRanges[i++] = *RI; - FixItHints.clear(); + assert(NumDiagRanges < DiagnosticsEngine::MaxFixItHints && + "Too many arguments to diagnostic!"); + NumDiagFixItHints = 0; for (StoredDiagnostic::fixit_iterator FI = storedDiag.fixit_begin(), FE = storedDiag.fixit_end(); FI != FE; ++FI) - FixItHints.push_back(*FI); + DiagFixItHints[NumDiagFixItHints++] = *FI; assert(Client && "DiagnosticConsumer not set!"); Level DiagLevel = storedDiag.getLevel(); @@ -386,6 +388,7 @@ void DiagnosticsEngine::Report(const StoredDiagnostic &storedDiag) { void DiagnosticBuilder::FlushCounts() { DiagObj->NumDiagArgs = NumArgs; DiagObj->NumDiagRanges = NumRanges; + DiagObj->NumDiagFixItHints = NumFixits; } bool DiagnosticBuilder::Emit() { |