diff options
author | Chris Lattner <sabre@nondot.org> | 2010-02-12 18:52:52 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-02-12 18:52:52 +0000 |
commit | 41e79e2912e3765170bb74c9ecf514d01aebffff (patch) | |
tree | 4314b6ccba7f6aa5dcb84d91aac4d8587603030e | |
parent | c1eec891eb008cf3bc89d69d90af82678513f79b (diff) |
restructure code a bit: there are two potential issues
worth asserting about in this code: 1) if the source range
is bogus (begin loc after end loc), and 2) if the client
is trying to highlight a range that is purely whitespace.
It is possible to just silently ignore #2, but it seems like
it is always a bug, so lets keep asserting on this condition,
but with a better assert message.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95998 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Frontend/TextDiagnosticPrinter.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/Frontend/TextDiagnosticPrinter.cpp b/lib/Frontend/TextDiagnosticPrinter.cpp index 83b4542caa..9ec5ffe1c3 100644 --- a/lib/Frontend/TextDiagnosticPrinter.cpp +++ b/lib/Frontend/TextDiagnosticPrinter.cpp @@ -104,11 +104,6 @@ void TextDiagnosticPrinter::HighlightRange(const SourceRange &R, if (StartColNo) --StartColNo; // Zero base the col #. } - // Pick the first non-whitespace column. - while (StartColNo < SourceLine.size() && - (SourceLine[StartColNo] == ' ' || SourceLine[StartColNo] == '\t')) - ++StartColNo; - // Compute the column number of the end. unsigned EndColNo = CaretLine.size(); if (EndLineNo == LineNo) { @@ -123,16 +118,25 @@ void TextDiagnosticPrinter::HighlightRange(const SourceRange &R, } } + assert(StartColNo <= EndColNo && "Invalid range!"); + + // Pick the first non-whitespace column. + while (StartColNo < SourceLine.size() && + (SourceLine[StartColNo] == ' ' || SourceLine[StartColNo] == '\t')) + ++StartColNo; + // Pick the last non-whitespace column. - if (EndColNo <= SourceLine.size()) - while (EndColNo-1 && - (SourceLine[EndColNo-1] == ' ' || SourceLine[EndColNo-1] == '\t')) - --EndColNo; - else + if (EndColNo > SourceLine.size()) EndColNo = SourceLine.size(); + while (EndColNo-1 && + (SourceLine[EndColNo-1] == ' ' || SourceLine[EndColNo-1] == '\t')) + --EndColNo; + + // If the start/end passed each other, then we are trying to highlight a range + // that just exists in whitespace, which must be some sort of other bug. + assert(StartColNo <= EndColNo && "Trying to highlight whitespace??"); // Fill the range with ~'s. - assert(StartColNo <= EndColNo && "Invalid range!"); for (unsigned i = StartColNo; i < EndColNo; ++i) CaretLine[i] = '~'; } |