[cfe-commits] r104996 - in /cfe/trunk: lib/Lex/LiteralSupport.cpp test/CodeGen/pascal-wchar-string.c
Fariborz Jahanian
fjahanian at apple.com
Fri May 28 12:40:48 PDT 2010
Author: fjahanian
Date: Fri May 28 14:40:48 2010
New Revision: 104996
URL: http://llvm.org/viewvc/llvm-project?rev=104996&view=rev
Log:
Fix a miscompile of wchar pascal strings.
(radar 8020384)
Added:
cfe/trunk/test/CodeGen/pascal-wchar-string.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=104996&r1=104995&r2=104996&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)
+++ cfe/trunk/lib/Lex/LiteralSupport.cpp Fri May 28 14:40:48 2010
@@ -905,6 +905,8 @@
if (Pascal) {
ResultBuf[0] = ResultPtr-&ResultBuf[0]-1;
+ if (AnyWide)
+ ResultBuf[0] /= wchar_tByteWidth;
// Verify that pascal strings aren't too large.
if (GetStringLength() > 256 && Complain) {
Added: cfe/trunk/test/CodeGen/pascal-wchar-string.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pascal-wchar-string.c?rev=104996&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/pascal-wchar-string.c (added)
+++ cfe/trunk/test/CodeGen/pascal-wchar-string.c Fri May 28 14:40:48 2010
@@ -0,0 +1,31 @@
+// RUN: %clang_cc1 -emit-llvm -o - %s -fpascal-strings -fshort-wchar | FileCheck %s
+// rdar: // 8020384
+
+extern void abort (void);
+
+typedef unsigned short UInt16;
+
+typedef UInt16 UniChar;
+
+int main(int argc, char* argv[])
+{
+
+ char st[] = "\pfoo"; // pascal string
+ UniChar wt[] = L"\pbar"; // pascal Unicode string
+ UniChar wt1[] = L"\p";
+ UniChar wt2[] = L"\pgorf";
+
+ if (st[0] != 3)
+ abort ();
+ if (wt[0] != 3)
+ abort ();
+ if (wt1[0] != 0)
+ abort ();
+ if (wt2[0] != 4)
+ abort ();
+
+ return 0;
+}
+
+// CHECK: c"\03\00b\00a\00r\00\00\00"
+// CHECK: c"\04\00g\00o\00r\00f\00\00\00"
More information about the cfe-commits
mailing list