diff options
Diffstat (limited to 'lib/Frontend/TextDiagnosticPrinter.cpp')
| -rw-r--r-- | lib/Frontend/TextDiagnosticPrinter.cpp | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Frontend/TextDiagnosticPrinter.cpp b/lib/Frontend/TextDiagnosticPrinter.cpp index 63d9a50b368b..14769c187393 100644 --- a/lib/Frontend/TextDiagnosticPrinter.cpp +++ b/lib/Frontend/TextDiagnosticPrinter.cpp @@ -214,6 +214,7 @@ static void SelectInterestingSourceRegion(std::string &SourceLine,      // Move the end of the interesting region right until we've      // pulled in something else interesting.      if (CaretEnd != SourceLength) { +      assert(CaretEnd < SourceLength && "Unexpected caret position!");        unsigned NewEnd = CaretEnd;        // Skip over any whitespace we see here; we're looking for @@ -320,6 +321,11 @@ void TextDiagnosticPrinter::EmitCaretDiagnostic(SourceLocation Loc,    while (*LineEnd != '\n' && *LineEnd != '\r' && *LineEnd != '\0')      ++LineEnd; +  // FIXME: This shouldn't be necessary, but the CaretEndColNo can extend past +  // the source line length as currently being computed. See +  // test/Misc/message-length.c. +  CaretEndColNo = std::min(CaretEndColNo, unsigned(LineEnd - LineStart)); +    // Copy the line of code into an std::string for ease of manipulation.    std::string SourceLine(LineStart, LineEnd);  | 
