diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-07-12 08:20:49 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-07-12 08:20:49 +0000 |
commit | af082c3b163397c040c3a98c7a5f09ee2a0badef (patch) | |
tree | f2bbab5e71c4027154e943b6b4f2a8673749b8fb /lib/Frontend | |
parent | be51e43ba2c57b8032286af4e8713485b6dc78c3 (diff) |
PR13312: Don't crash when printing a fixit that ends in a unicode character.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160112 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend')
-rw-r--r-- | lib/Frontend/TextDiagnostic.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Frontend/TextDiagnostic.cpp b/lib/Frontend/TextDiagnostic.cpp index ae1396672b..306306d3ac 100644 --- a/lib/Frontend/TextDiagnostic.cpp +++ b/lib/Frontend/TextDiagnostic.cpp @@ -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, ' '); |