1*67e74705SXin Li // RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-C %s 2*67e74705SXin Li // RUN: %clang_cc1 -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-C %s 3*67e74705SXin Li // RUN: %clang_cc1 -x c++ -std=c++11 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-CPP0X %s 4*67e74705SXin Li 5*67e74705SXin Li #include <stddef.h> 6*67e74705SXin Li main()7*67e74705SXin Liint main() { 8*67e74705SXin Li // CHECK-C: store i8 97 9*67e74705SXin Li // CHECK-CPP0X: store i8 97 10*67e74705SXin Li char a = 'a'; 11*67e74705SXin Li 12*67e74705SXin Li // Should truncate value (equal to last character). 13*67e74705SXin Li // CHECK-C: store i8 98 14*67e74705SXin Li // CHECK-CPP0X: store i8 98 15*67e74705SXin Li char b = 'ab'; 16*67e74705SXin Li 17*67e74705SXin Li // Should get concatenated characters 18*67e74705SXin Li // CHECK-C: store i32 24930 19*67e74705SXin Li // CHECK-CPP0X: store i32 24930 20*67e74705SXin Li int b1 = 'ab'; 21*67e74705SXin Li 22*67e74705SXin Li // Should get concatenated characters 23*67e74705SXin Li // CHECK-C: store i32 808464432 24*67e74705SXin Li // CHECK-CPP0X: store i32 808464432 25*67e74705SXin Li int b2 = '0000'; 26*67e74705SXin Li 27*67e74705SXin Li // Should get truncated value (last four characters concatenated) 28*67e74705SXin Li // CHECK-C: store i32 1919512167 29*67e74705SXin Li // CHECK-CPP0X: store i32 1919512167 30*67e74705SXin Li int b3 = 'somesillylongstring'; 31*67e74705SXin Li 32*67e74705SXin Li // CHECK-C: store i32 97 33*67e74705SXin Li // CHECK-CPP0X: store i32 97 34*67e74705SXin Li wchar_t wa = L'a'; 35*67e74705SXin Li 36*67e74705SXin Li // Should pick second character. 37*67e74705SXin Li // CHECK-C: store i32 98 38*67e74705SXin Li // CHECK-CPP0X: store i32 98 39*67e74705SXin Li wchar_t wb = L'ab'; 40*67e74705SXin Li 41*67e74705SXin Li #if __cplusplus >= 201103L 42*67e74705SXin Li // CHECK-CPP0X: store i16 97 43*67e74705SXin Li char16_t ua = u'a'; 44*67e74705SXin Li 45*67e74705SXin Li // CHECK-CPP0X: store i32 97 46*67e74705SXin Li char32_t Ua = U'a'; 47*67e74705SXin Li 48*67e74705SXin Li // CHECK-CPP0X: store i16 1047 49*67e74705SXin Li char16_t ua1 = u'З'; 50*67e74705SXin Li // CHECK-CPP0X: store i16 12538 51*67e74705SXin Li char16_t ua2 = u'ヺ'; 52*67e74705SXin Li // CHECK-CPP0X: store i16 -27177 53*67e74705SXin Li char16_t ua3 = u'闗'; 54*67e74705SXin Li 55*67e74705SXin Li // CHECK-CPP0X: store i32 181 56*67e74705SXin Li char32_t Ua1 = U'µ'; 57*67e74705SXin Li // CHECK-CPP0X: store i32 38359 58*67e74705SXin Li char32_t Ua2 = U'闗'; 59*67e74705SXin Li // CHECK-CPP0X: store i32 128128 60*67e74705SXin Li char32_t Ua3 = U''; 61*67e74705SXin Li 62*67e74705SXin Li #endif 63*67e74705SXin Li 64*67e74705SXin Li // CHECK-C: store i32 61451 65*67e74705SXin Li // CHECK-CPP0X: store i32 61451 66*67e74705SXin Li wchar_t wc = L'\uF00B'; 67*67e74705SXin Li 68*67e74705SXin Li #if __cplusplus >= 201103L 69*67e74705SXin Li // -4085 == 0xf00b 70*67e74705SXin Li // CHECK-CPP0X: store i16 -4085 71*67e74705SXin Li char16_t uc = u'\uF00B'; 72*67e74705SXin Li 73*67e74705SXin Li // CHECK-CPP0X: store i32 61451 74*67e74705SXin Li char32_t Uc = U'\uF00B'; 75*67e74705SXin Li #endif 76*67e74705SXin Li 77*67e74705SXin Li // CHECK-C: store i32 1110027 78*67e74705SXin Li // CHECK-CPP0X: store i32 1110027 79*67e74705SXin Li wchar_t wd = L'\U0010F00B'; 80*67e74705SXin Li 81*67e74705SXin Li #if __cplusplus >= 201103L 82*67e74705SXin Li // CHECK-CPP0X: store i32 1110027 83*67e74705SXin Li char32_t Ud = U'\U0010F00B'; 84*67e74705SXin Li #endif 85*67e74705SXin Li 86*67e74705SXin Li // Should pick second character. 87*67e74705SXin Li // CHECK-C: store i32 1110027 88*67e74705SXin Li // CHECK-CPP0X: store i32 1110027 89*67e74705SXin Li wchar_t we = L'\u1234\U0010F00B'; 90*67e74705SXin Li } 91