[llvm-branch-commits] [cfe-branch] r105051 - in /cfe/branches/Apple/whitney: lib/Lex/LiteralSupport.cpp test/CodeGen/pascal-wchar-string.c

Daniel Dunbar daniel at zuster.org
Fri May 28 16:07:26 PDT 2010


Author: ddunbar
Date: Fri May 28 18:07:26 2010
New Revision: 105051

URL: http://llvm.org/viewvc/llvm-project?rev=105051&view=rev
Log:
Merge r104996:
--
Author: Fariborz Jahanian <fjahanian at apple.com>
Date:   Fri May 28 19:40:48 2010 +0000

    Fix a miscompile of wchar pascal strings.
    (radar 8020384)

Added:
    cfe/branches/Apple/whitney/test/CodeGen/pascal-wchar-string.c
Modified:
    cfe/branches/Apple/whitney/lib/Lex/LiteralSupport.cpp

Modified: cfe/branches/Apple/whitney/lib/Lex/LiteralSupport.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/lib/Lex/LiteralSupport.cpp?rev=105051&r1=105050&r2=105051&view=diff
==============================================================================
--- cfe/branches/Apple/whitney/lib/Lex/LiteralSupport.cpp (original)
+++ cfe/branches/Apple/whitney/lib/Lex/LiteralSupport.cpp Fri May 28 18:07:26 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/branches/Apple/whitney/test/CodeGen/pascal-wchar-string.c
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/test/CodeGen/pascal-wchar-string.c?rev=105051&view=auto
==============================================================================
--- cfe/branches/Apple/whitney/test/CodeGen/pascal-wchar-string.c (added)
+++ cfe/branches/Apple/whitney/test/CodeGen/pascal-wchar-string.c Fri May 28 18:07:26 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 llvm-branch-commits mailing list