r188863 - Issue fixits replacing invalid character literals with the equivalent \xNN
Richard Smith
richard at metafoo.co.uk
Wed Aug 21 09:18:08 PDT 2013
On 20 Aug 2013 21:15, "Nick Lewycky" <nicholas at mxc.ca> wrote:
>
> Author: nicholas
> Date: Tue Aug 20 23:10:58 2013
> New Revision: 188863
>
> URL: http://llvm.org/viewvc/llvm-project?rev=188863&view=rev
> Log:
> Issue fixits replacing invalid character literals with the equivalent \xNN
> escape code.
>
> Added:
> cfe/trunk/test/Lexer/char-literal-encoding-fixit.c
> Modified:
> cfe/trunk/lib/Lex/LiteralSupport.cpp
>
> Modified: cfe/trunk/lib/Lex/LiteralSupport.cpp
> URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/LiteralSupport.cpp?rev=188863&r1=188862&r2=188863&view=diff
>
==============================================================================
> --- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)
> +++ cfe/trunk/lib/Lex/LiteralSupport.cpp Tue Aug 20 23:10:58 2013
> @@ -978,7 +978,7 @@ CharLiteralParser::CharLiteralParser(con
> uint32_t largest_character_for_kind;
> if (tok::wide_char_constant == Kind) {
> largest_character_for_kind =
> - 0xFFFFFFFFu >> (32-PP.getTargetInfo().getWCharWidth());
> + 0xFFFFFFFFu >> (32 - PP.getTargetInfo().getWCharWidth());
> } else if (tok::utf16_char_constant == Kind) {
> largest_character_for_kind = 0xFFFF;
> } else if (tok::utf32_char_constant == Kind) {
> @@ -1009,7 +1009,13 @@ CharLiteralParser::CharLiteralParser(con
> unsigned Msg = diag::err_bad_character_encoding;
> if (NoErrorOnBadEncoding)
> Msg = diag::warn_bad_character_encoding;
> - PP.Diag(Loc, Msg);
> + std::string escaped =
llvm::utohexstr(static_cast<uint8_t>(*start));
Are we guaranteed that the character is >= 0x10 here? (utohexstr might
otherwise produce only one character).
> + FullSourceLoc SourceLoc(Loc, PP.getSourceManager());
> + PP.Diag(Loc, Msg) << FixItHint::CreateReplacement(
> + MakeCharSourceRange(PP.getLangOpts(),
> + SourceLoc,
TokBegin, start,
> + start + 1),
> + "\\x" + escaped);
> if (NoErrorOnBadEncoding) {
> start = tmp_in_start;
> buffer_begin = tmp_out_start;
> @@ -1047,7 +1053,7 @@ CharLiteralParser::CharLiteralParser(con
> unsigned CharWidth = getCharWidth(Kind, PP.getTargetInfo());
> uint64_t result =
> ProcessCharEscape(TokBegin, begin, end, HadError,
> - FullSourceLoc(Loc,PP.getSourceManager()),
> + FullSourceLoc(Loc, PP.getSourceManager()),
> CharWidth, &PP.getDiagnostics(),
PP.getLangOpts());
> *buffer_begin++ = result;
> }
>
> Added: cfe/trunk/test/Lexer/char-literal-encoding-fixit.c
> URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/char-literal-encoding-fixit.c?rev=188863&view=auto
>
==============================================================================
> --- cfe/trunk/test/Lexer/char-literal-encoding-fixit.c (added)
> +++ cfe/trunk/test/Lexer/char-literal-encoding-fixit.c Tue Aug 20
23:10:58 2013
> @@ -0,0 +1,11 @@
> +// RUN: cp %s %t
> +// RUN: %clang_cc1 -fixit -x c %t
> +// RUN: FileCheck -input-file=%t %t
> +
> +// Note that this file is not valid UTF-8.
> +
> +int test1 = 'ˆ';
> +// CHECK: int test1 = '\x88';
> +
> +int test2 = 'abˆc';
> +// CHECK: int test2 = 'ab\x88c';
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130821/1b734424/attachment.html>
More information about the cfe-commits
mailing list