xref: /aosp_15_r20/external/clang/test/CodeGen/string-literal-unicode-conversion.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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++ -std=c++0x -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-CPP0X %s
3*67e74705SXin Li // RUN: %clang_cc1 -x c++ -std=c++0x -fshort-wchar -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-SHORTWCHAR %s
4*67e74705SXin Li 
5*67e74705SXin Li // This file contains a mix of ISO-8859-1 and UTF-8 encoded data.
6*67e74705SXin Li // the literal assigned to 'aa' should be the ISO-8859-1 encoding for the code
7*67e74705SXin Li // points U+00C0 U+00E9 U+00EE U+00F5 U+00FC
8*67e74705SXin Li 
9*67e74705SXin Li // The rest of the literals should contain the UTF-8 encoding for U+041A U+043E
10*67e74705SXin Li // U+0448 U+043A U+0430
11*67e74705SXin Li 
12*67e74705SXin Li #ifndef __cplusplus
13*67e74705SXin Li #include <stddef.h>
14*67e74705SXin Li #endif
15*67e74705SXin Li 
16*67e74705SXin Li #ifdef __cplusplus
17*67e74705SXin Li extern "C"
18*67e74705SXin Li #endif
f()19*67e74705SXin Li void f() {
20*67e74705SXin Li   // CHECK-C: private unnamed_addr constant [6 x i8] c"\C0\E9\EE\F5\FC\00", align 1
21*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [6 x i8] c"\C0\E9\EE\F5\FC\00", align 1
22*67e74705SXin Li   char const *aa = "�����";
23*67e74705SXin Li 
24*67e74705SXin Li   // CHECK-C: private unnamed_addr constant [11 x i8] c"\D0\9A\D0\BE\D1\88\D0\BA\D0\B0\00", align 1
25*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [11 x i8] c"\D0\9A\D0\BE\D1\88\D0\BA\D0\B0\00", align 1
26*67e74705SXin Li   char const *a = "Кошка";
27*67e74705SXin Li 
28*67e74705SXin Li   // CHECK-C: private unnamed_addr constant [6 x i32] [i32 1050, i32 1086, i32 1096, i32 1082, i32 1072, i32 0], align 4
29*67e74705SXin Li   // CHECK-SHORTWCHAR: private unnamed_addr constant [6 x i16] [i16 1050, i16 1086, i16 1096, i16 1082, i16 1072, i16 0], align 2
30*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [6 x i32] [i32 1050, i32 1086, i32 1096, i32 1082, i32 1072, i32 0], align 4
31*67e74705SXin Li   wchar_t const *b = L"Кошка";
32*67e74705SXin Li 
33*67e74705SXin Li   // CHECK-C: private unnamed_addr constant [4 x i32] [i32 20320, i32 22909, i32 66304, i32 0], align 4
34*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [4 x i32] [i32 20320, i32 22909, i32 66304, i32 0], align 4
35*67e74705SXin Li #if __WCHAR_MAX__ == 2147483647
36*67e74705SXin Li   wchar_t const *b2 = L"\x4f60\x597d\x10300";
37*67e74705SXin Li #endif
38*67e74705SXin Li 
39*67e74705SXin Li #if __cplusplus >= 201103L
40*67e74705SXin Li 
41*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [12 x i8] c"1\D0\9A\D0\BE\D1\88\D0\BA\D0\B0\00", align 1
42*67e74705SXin Li   char const *c = u8"1Кошка";
43*67e74705SXin Li 
44*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [7 x i16] [i16 50, i16 1050, i16 1086, i16 1096, i16 1082, i16 1072, i16 0], align 2
45*67e74705SXin Li   char16_t const *e = u"2Кошка";
46*67e74705SXin Li 
47*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [7 x i32] [i32 51, i32 1050, i32 1086, i32 1096, i32 1082, i32 1072, i32 0], align 4
48*67e74705SXin Li   char32_t const *f = U"3Кошка";
49*67e74705SXin Li 
50*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [12 x i8] c"4\D0\9A\D0\BE\D1\88\D0\BA\D0\B0\00", align 1
51*67e74705SXin Li   char const *d = u8R"(4Кошка)";
52*67e74705SXin Li 
53*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [7 x i16] [i16 53, i16 1050, i16 1086, i16 1096, i16 1082, i16 1072, i16 0], align 2
54*67e74705SXin Li   char16_t const *g = uR"(5Кошка)";
55*67e74705SXin Li 
56*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [7 x i32] [i32 54, i32 1050, i32 1086, i32 1096, i32 1082, i32 1072, i32 0], align 4
57*67e74705SXin Li   char32_t const *h = UR"(6Кошка)";
58*67e74705SXin Li 
59*67e74705SXin Li   // CHECK-SHORTWCHAR: private unnamed_addr constant [7 x i16] [i16 55, i16 1050, i16 1086, i16 1096, i16 1082, i16 1072, i16 0], align 2
60*67e74705SXin Li   // CHECK-CPP0X: private unnamed_addr constant [7 x i32] [i32 55, i32 1050, i32 1086, i32 1096, i32 1082, i32 1072, i32 0], align 4
61*67e74705SXin Li   wchar_t const *i = LR"(7Кошка)";
62*67e74705SXin Li 
63*67e74705SXin Li #endif
64*67e74705SXin Li }
65