[cfe-commits] r144521 - in /cfe/trunk: lib/Lex/LiteralSupport.cpp test/CodeGen/string-literal-unicode-conversion.c

Nico Weber nicolasweber at gmx.de
Sun Nov 13 21:17:38 PST 2011


Author: nico
Date: Sun Nov 13 23:17:37 2011
New Revision: 144521

URL: http://llvm.org/viewvc/llvm-project?rev=144521&view=rev
Log:
Fix a regression in wide character codegen. See PR11369.


Modified:
    cfe/trunk/lib/Lex/LiteralSupport.cpp
    cfe/trunk/test/CodeGen/string-literal-unicode-conversion.c

Modified: cfe/trunk/lib/Lex/LiteralSupport.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/LiteralSupport.cpp?rev=144521&r1=144520&r2=144521&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)
+++ cfe/trunk/lib/Lex/LiteralSupport.cpp Sun Nov 13 23:17:37 2011
@@ -1095,13 +1095,13 @@
           // FIXME: Make the type of the result buffer correct instead of
           // using reinterpret_cast.
           UTF32 *ResultWidePtr = reinterpret_cast<UTF32*>(ResultPtr);
-          *ResultWidePtr = ResultChar & 0xFF;
+          *ResultWidePtr = ResultChar;
           ResultPtr += 4;
         } else if (CharByteWidth == 2) {
           // FIXME: Make the type of the result buffer correct instead of
           // using reinterpret_cast.
           UTF16 *ResultWidePtr = reinterpret_cast<UTF16*>(ResultPtr);
-          *ResultWidePtr = ResultChar & 0xFF;
+          *ResultWidePtr = ResultChar & 0xFFFF;
           ResultPtr += 2;
         } else {
           assert(CharByteWidth == 1 && "Unexpected char width");

Modified: cfe/trunk/test/CodeGen/string-literal-unicode-conversion.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/string-literal-unicode-conversion.c?rev=144521&r1=144520&r2=144521&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/string-literal-unicode-conversion.c (original)
+++ cfe/trunk/test/CodeGen/string-literal-unicode-conversion.c Sun Nov 13 23:17:37 2011
@@ -29,6 +29,11 @@
   // CHECK-SHORTWCHAR: private unnamed_addr constant [6 x i16] [i16 1050, i16 1086, i16 1096, i16 1082, i16 1072, i16 0], align 2
   // CHECK-CPP0X: private unnamed_addr constant [6 x i32] [i32 1050, i32 1086, i32 1096, i32 1082, i32 1072, i32 0], align 4
   wchar_t const *b = L"Кошка";
+
+  // CHECK-C: private unnamed_addr constant [4 x i32] [i32 20320, i32 22909, i32 66304, i32 0], align 4
+  // CHECK-SHORTWCHAR: private unnamed_addr constant [4 x i16] [i16 20320, i16 22909, i16 768, i16 0], align 2
+  // CHECK-CPP0X: private unnamed_addr constant [4 x i32] [i32 20320, i32 22909, i32 66304, i32 0], align 4
+  wchar_t const *b2 = L"\x4f60\x597d\x10300";
   
 #if __cplusplus >= 201103L
   





More information about the cfe-commits mailing list