Frontend: Fix SourceColumnMap assertion failure on non-ascii characters.
authorLogan Chien <tzuhsiang.chien@gmail.com>
Thu, 8 Jan 2015 13:19:07 +0000 (13:19 +0000)
committerLogan Chien <tzuhsiang.chien@gmail.com>
Thu, 8 Jan 2015 13:19:07 +0000 (13:19 +0000)
commitd3d385d6248548f2b53eaf2bf610646a41d2cfaa
tree33ea90437d92b3f0f3dfe7a3fcfeb6659734c90e
parent285fbd551a4e8ee555ec3eb57c34044ef22fb499
Frontend: Fix SourceColumnMap assertion failure on non-ascii characters.

If there are some non-ascii character in the input source code, the
column index might be smallar than the byte index.  This will result
in two possible assertion failures.  This CL fixes the computation of
the column index and byte index.

1. The assertion in startOfNextColumn() and startOfPreviousColumn()
   should not be raised when the byte index is greater than the column
   index since the non-ascii characters may use more than one bytes to
   store a character in a column.

2. The length of the caret line should be equal to the number of columns
   of source line, instead of the length of the source line.  Otherwise,
   the assertion in selectInterestingSourceRegion will be raised because
   the removed columns plus the kept columns are not greater than the max
   column, which means that we should not remove any column at all.

llvm-svn: 225442
clang/lib/Frontend/TextDiagnostic.cpp
clang/test/Frontend/source-col-map.c [new file with mode: 0644]