1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li struct P1 { 4*67e74705SXin Li struct Q1 { 5*67e74705SXin Li char a[6]; 6*67e74705SXin Li char b[6]; 7*67e74705SXin Li } q; 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li // CHECK: { [6 x i8] c"foo\00\00\00", [6 x i8] c"\00x\00\00\00\00" } 11*67e74705SXin Li struct P1 l1 = { 12*67e74705SXin Li (struct Q1){ "foo", "bar" }, 13*67e74705SXin Li .q.b = { "boo" }, 14*67e74705SXin Li .q.b = { [1] = 'x' } 15*67e74705SXin Li }; 16*67e74705SXin Li 17*67e74705SXin Li // CHECK: { [6 x i8] c"foo\00\00\00", [6 x i8] c"bxo\00\00\00" } 18*67e74705SXin Li struct P1 l1a = { 19*67e74705SXin Li (struct Q1){ "foo", "bar" }, 20*67e74705SXin Li .q.b = { "boo" }, 21*67e74705SXin Li .q.b[1] = 'x' 22*67e74705SXin Li }; 23*67e74705SXin Li 24*67e74705SXin Li 25*67e74705SXin Li struct P2 { char x[6]; }; 26*67e74705SXin Li 27*67e74705SXin Li // CHECK: { [6 x i8] c"n\00\00\00\00\00" } 28*67e74705SXin Li struct P2 l2 = { 29*67e74705SXin Li .x = { [1] = 'o' }, 30*67e74705SXin Li .x = { [0] = 'n' } 31*67e74705SXin Li }; 32*67e74705SXin Li 33*67e74705SXin Li struct P3 { 34*67e74705SXin Li struct Q3 { 35*67e74705SXin Li struct R1 { 36*67e74705SXin Li int a, b, c; 37*67e74705SXin Li } r1; 38*67e74705SXin Li 39*67e74705SXin Li struct R2 { 40*67e74705SXin Li int d, e, f; 41*67e74705SXin Li } r2; 42*67e74705SXin Li } q; 43*67e74705SXin Li }; 44*67e74705SXin Li 45*67e74705SXin Li // CHECK: @l3 = global %struct.P3 { %struct.Q3 { %struct.R1 { i32 1, i32 2, i32 3 }, %struct.R2 { i32 0, i32 10, i32 0 } } } 46*67e74705SXin Li struct P3 l3 = { 47*67e74705SXin Li (struct Q3){ { 1, 2, 3 }, { 4, 5, 6 } }, 48*67e74705SXin Li .q.r2 = { 7, 8, 9 }, 49*67e74705SXin Li .q.r2 = { .e = 10 } 50*67e74705SXin Li }; 51*67e74705SXin Li 52*67e74705SXin Li // This bit is taken from Sema/wchar.c so we can avoid the wchar.h include. 53*67e74705SXin Li typedef __WCHAR_TYPE__ wchar_t; 54*67e74705SXin Li 55*67e74705SXin Li struct P4 { 56*67e74705SXin Li wchar_t x[6]; 57*67e74705SXin Li }; 58*67e74705SXin Li 59*67e74705SXin Li // CHECK: { [6 x i32] [i32 102, i32 111, i32 120, i32 0, i32 0, i32 0] } 60*67e74705SXin Li struct P4 l4 = { { L"foo" }, .x[2] = L'x' }; 61*67e74705SXin Li 62*67e74705SXin Li struct P5 { 63*67e74705SXin Li int x; 64*67e74705SXin Li struct Q5 { 65*67e74705SXin Li int a, b, c; 66*67e74705SXin Li } q; 67*67e74705SXin Li int y; 68*67e74705SXin Li }; 69*67e74705SXin Li 70*67e74705SXin Li // A three-pass test 71*67e74705SXin Li // CHECK: @l5 = global %struct.P5 { i32 1, %struct.Q5 { i32 6, i32 9, i32 8 }, i32 5 } 72*67e74705SXin Li struct P5 l5 = { 1, { 2, 3, 4 }, 5, 73*67e74705SXin Li .q = { 6, 7, 8 }, 74*67e74705SXin Li .q.b = 9 }; 75