1 // RUN: %clang_cc1 -emit-llvm -o - %s -fpascal-strings -fshort-wchar | FileCheck %s 2 // rdar://8020384 3 4 #include <stddef.h> 5 6 extern void abort (void); 7 8 typedef unsigned short UInt16; 9 10 typedef UInt16 UniChar; 11 12 int main(int argc, char* argv[]) 13 { 14 15 char st[] = "\pfoo"; // pascal string 16 UniChar wt[] = L"\pbar"; // pascal Unicode string 17 UniChar wt1[] = L"\p"; 18 UniChar wt2[] = L"\pgorf"; 19 20 if (st[0] != 3) 21 abort (); 22 if (wt[0] != 3) 23 abort (); 24 if (wt1[0] != 0) 25 abort (); 26 if (wt2[0] != 4) 27 abort (); 28 29 return 0; 30 } 31 32 // CHECK: c"\03\00b\00a\00r\00\00\00" 33 // CHECK: c"\04\00g\00o\00r\00f\00\00\00" 34 35 36 // PR8856 - -fshort-wchar makes wchar_t be unsigned. 37 // CHECK: @test2 38 // CHECK: store volatile i32 1, i32* %isUnsigned 39 void test2() { 40 volatile int isUnsigned = (wchar_t)-1 > (wchar_t)0; 41 } 42