On 08/21/2013 06:18 PM, Richard Smith wrote:
On 20 Aug 2013 21:15, "Nick Lewycky" <[email protected]
<mailto:[email protected]>> 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/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';

But the latter will be parsed as "a", "b", "\x88c" rather than "a", "b", "\x88", "c". I think the only safe way to do such a replacement esp. for character literals is to use octal \ooo escapes. (For string literals, there would also be the possibility of splitting into adjacent string literals.)

Stephan

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to