15745febeSRichard Smith // RUN: %clang_cc1 -std=c++98 -emit-llvm -o - %s -triple x86_64-linux-gnu | FileCheck %s 25745febeSRichard Smith // RUN: %clang_cc1 -std=c++11 -emit-llvm -o - %s -triple x86_64-linux-gnu | FileCheck %s 35745febeSRichard Smith 45745febeSRichard Smith struct A { int x, y[3]; }; 55745febeSRichard Smith struct B { A a; }; 65745febeSRichard Smith 7*fd739804SFangrui Song // CHECK: @b ={{.*}} global %{{[^ ]*}} { %{{[^ ]*}} { i32 1, [3 x i32] [i32 2, i32 5, i32 4] } } 85745febeSRichard Smith B b = {(A){1, 2, 3, 4}, .a.y[1] = 5}; 95745febeSRichard Smith 105745febeSRichard Smith union U { 115745febeSRichard Smith int n; 125745febeSRichard Smith float f; 135745febeSRichard Smith }; 145745febeSRichard Smith struct C { 155745febeSRichard Smith int x; 165745febeSRichard Smith U u[3]; 175745febeSRichard Smith }; 185745febeSRichard Smith struct D { 195745febeSRichard Smith C c; 205745febeSRichard Smith }; 215745febeSRichard Smith 225745febeSRichard Smith // CHECK: @d1 = {{.*}} { i32 1, [3 x %[[U:.*]]] [%[[U]] { i32 2 }, %[[U]] { i32 5 }, %[[U]] { i32 4 }] } 235745febeSRichard Smith D d1 = {(C){1, {{.n=2}, {.f=3}, {.n=4}}}, .c.u[1].n = 5}; 245745febeSRichard Smith 255745febeSRichard Smith // CHECK: @d2 = {{.*}} { i32 1, { %[[U]], float, %[[U]] } { %[[U]] { i32 2 }, float 5.{{0*}}e+00, %[[U]] { i32 4 } } } 265745febeSRichard Smith D d2 = {(C){1, 2, 3, 4}, .c.u[1].f = 5}; 275745febeSRichard Smith 285745febeSRichard Smith struct Bitfield { 295745febeSRichard Smith int a : 3; 305745febeSRichard Smith int b : 4; 315745febeSRichard Smith int c : 5; 325745febeSRichard Smith }; 335745febeSRichard Smith struct WithBitfield { 345745febeSRichard Smith int n; 355745febeSRichard Smith Bitfield b; 365745febeSRichard Smith }; 375745febeSRichard Smith // CHECK: @bitfield = {{.*}} { i32 1, { i8, i8, [2 x i8] } { i8 42, i8 2, [2 x i8] undef } } 385745febeSRichard Smith WithBitfield bitfield = {1, (Bitfield){2, 3, 4}, .b.b = 5}; 395745febeSRichard Smith 405745febeSRichard Smith struct String { 415745febeSRichard Smith const char buffer[12]; 425745febeSRichard Smith }; 435745febeSRichard Smith struct WithString { 445745febeSRichard Smith String str; 455745febeSRichard Smith }; 465745febeSRichard Smith // CHECK: @string = {{.*}} [12 x i8] c"Hello World\00" } } 475745febeSRichard Smith WithString string = {(String){"hello world"}, .str.buffer[0] = 'H', .str.buffer[6] = 'W'}; 485745febeSRichard Smith 495745febeSRichard Smith struct LargeArray { 505745febeSRichard Smith int arr[4096]; 515745febeSRichard Smith }; 525745febeSRichard Smith struct WithLargeArray { 535745febeSRichard Smith LargeArray arr; 545745febeSRichard Smith }; 55*fd739804SFangrui Song // CHECK: @large ={{.*}} global { { <{ [11 x i32], [4085 x i32] }> } } { { <{ [11 x i32], [4085 x i32] }> } { <{ [11 x i32], [4085 x i32] }> <{ [11 x i32] [i32 1, i32 2, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 10], [4085 x i32] zeroinitializer }> } } 565745febeSRichard Smith WithLargeArray large = {(LargeArray){1, 2, 3}, .arr.arr[10] = 10}; 575745febeSRichard Smith 585745febeSRichard Smith union OverwritePaddingWithBitfield { 595745febeSRichard Smith struct Padding { unsigned : 8; char c; } padding; 605745febeSRichard Smith char bitfield : 3; 615745febeSRichard Smith }; 625745febeSRichard Smith struct WithOverwritePaddingWithBitfield { 635745febeSRichard Smith OverwritePaddingWithBitfield a; 645745febeSRichard Smith }; 65*fd739804SFangrui Song // CHECK: @overwrite_padding ={{.*}} global { { i8, i8 } } { { i8, i8 } { i8 3, i8 1 } } 665745febeSRichard Smith WithOverwritePaddingWithBitfield overwrite_padding = {(OverwritePaddingWithBitfield){1}, .a.bitfield = 3}; 67