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 | fc38aa7091bd977cc82fa9f1497bffab865a2a31 (patch) | |
| tree | b34898e9ba262cd63b922a715ddf99dd0676f1fb /clang | |
| parent | 30d99f4b9b6aeab0235d6b523ab5d32e47bf7013 (diff) | |
| download | bcm5719-llvm-fc38aa7091bd977cc82fa9f1497bffab865a2a31.tar.gz bcm5719-llvm-fc38aa7091bd977cc82fa9f1497bffab865a2a31.zip  | |
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.
llvm-svn: 95998
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Frontend/TextDiagnosticPrinter.cpp | 26 | 
1 files changed, 15 insertions, 11 deletions
diff --git a/clang/lib/Frontend/TextDiagnosticPrinter.cpp b/clang/lib/Frontend/TextDiagnosticPrinter.cpp index 83b4542caa2..9ec5ffe1c35 100644 --- a/clang/lib/Frontend/TextDiagnosticPrinter.cpp +++ b/clang/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] = '~';  }  | 

