forked from OSchip/llvm-project
fix Bug 12924
http://llvm.org/bugs/show_bug.cgi?id=12924 This issue was that the source location was pointing to a non-printable character and so CaretEnd was pointing one _column_ past the caret but not one _character_ past the caret. So the conversion between column and byte locations wasn't working (because the conversion is only valid from the first column or byte of a character). llvm-svn: 157372
This commit is contained in:
parent
2edc84ee60
commit
ac6fb8f9f6
|
@ -333,6 +333,22 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
|
|||
CaretEnd = std::max(FixItEnd, CaretEnd);
|
||||
}
|
||||
|
||||
// CaretEnd may have been set at the middle of a character
|
||||
// If it's not at a character's first column then advance it past the current
|
||||
// character.
|
||||
while (static_cast<int>(CaretEnd) < map.columns() &&
|
||||
-1 == map.columnToByte(CaretEnd))
|
||||
++CaretEnd;
|
||||
|
||||
assert((static_cast<int>(CaretStart) > map.columns() ||
|
||||
-1!=map.columnToByte(CaretStart)) &&
|
||||
"CaretStart must not point to a column in the middle of a source"
|
||||
" line character");
|
||||
assert((static_cast<int>(CaretEnd) > map.columns() ||
|
||||
-1!=map.columnToByte(CaretEnd)) &&
|
||||
"CaretEnd must not point to a column in the middle of a source line"
|
||||
" character");
|
||||
|
||||
// CaretLine[CaretStart, CaretEnd) contains all of the interesting
|
||||
// parts of the caret line. While this slice is smaller than the
|
||||
// number of columns we have, try to grow the slice to encompass
|
||||
|
|
Loading…
Reference in New Issue