forked from OSchip/llvm-project
Fix a miscompile of wchar pascal strings.
(radar 8020384) llvm-svn: 104996
This commit is contained in:
parent
76413597a9
commit
93bef10131
|
@ -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) {
|
||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue