PR13312: Don't crash when printing a fixit that ends in a unicode character.

llvm-svn: 160112
This commit is contained in:
Benjamin Kramer 2012-07-12 08:20:49 +00:00
parent 9a2cb42451
commit 29f90e804d
2 changed files with 21 additions and 1 deletions

View File

@ -1160,8 +1160,13 @@ std::string TextDiagnostic::buildFixItInsertionLine(
unsigned LastColumnModified
= HintColNo + I->CodeToInsert.size();
if (LastColumnModified <= static_cast<unsigned>(map.bytes()))
if (LastColumnModified <= static_cast<unsigned>(map.bytes())) {
// If we're right in the middle of a multibyte character skip to
// the end of it.
while (map.byteToColumn(LastColumnModified) == -1)
++LastColumnModified;
LastColumnModified = map.byteToColumn(LastColumnModified);
}
if (LastColumnModified > FixItInsertionLine.size())
FixItInsertionLine.resize(LastColumnModified, ' ');

View File

@ -0,0 +1,15 @@
// RUN: %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck -strict-whitespace %s
// PR13312
struct Foo {
int bar;
};
void test1() {
struct Foo foo;
(&foo)>bar = 42;
// CHECK: error: expected ';' after expression
// Make sure we emit the fixit right in front of the snowman.
// CHECK: {{^ \^$}}
// CHECK: {{^ ;$}}
}