diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-05-28 19:40:48 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-05-28 19:40:48 +0000 |
commit | 93bef10131528bc37782629360f1e037aa9a830a (patch) | |
tree | 8be46a9539e945b47e7459279044e1ce62087da7 | |
parent | 76413597a99a48898a3a1b230fe1190765801641 (diff) | |
download | bcm5719-llvm-93bef10131528bc37782629360f1e037aa9a830a.tar.gz bcm5719-llvm-93bef10131528bc37782629360f1e037aa9a830a.zip |
Fix a miscompile of wchar pascal strings.
(radar 8020384)
llvm-svn: 104996
-rw-r--r-- | clang/lib/Lex/LiteralSupport.cpp | 2 | ||||
-rw-r--r-- | clang/test/CodeGen/pascal-wchar-string.c | 31 |
2 files changed, 33 insertions, 0 deletions
diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp index b73f236641c..ff4d28f1288 100644 --- a/clang/lib/Lex/LiteralSupport.cpp +++ b/clang/lib/Lex/LiteralSupport.cpp @@ -905,6 +905,8 @@ StringLiteralParser(const Token *StringToks, unsigned NumStringToks, 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) { diff --git a/clang/test/CodeGen/pascal-wchar-string.c b/clang/test/CodeGen/pascal-wchar-string.c new file mode 100644 index 00000000000..89e4de489f0 --- /dev/null +++ b/clang/test/CodeGen/pascal-wchar-string.c @@ -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" |