Richard Smith | 5745feb | 2019-06-17 21:08:30 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -std=c++98 -emit-llvm -o - %s -triple x86_64-linux-gnu | FileCheck %s |
| 2 | // RUN: %clang_cc1 -std=c++11 -emit-llvm -o - %s -triple x86_64-linux-gnu | FileCheck %s |
| 3 | |
| 4 | struct A { int x, y[3]; }; |
| 5 | struct B { A a; }; |
| 6 | |
Fangrui Song | dbc96b5 | 2020-02-03 10:09:39 -0800 | [diff] [blame] | 7 | // CHECK: @b = global %{{[^ ]*}} { %{{[^ ]*}} { i32 1, [3 x i32] [i32 2, i32 5, i32 4] } } |
Richard Smith | 5745feb | 2019-06-17 21:08:30 +0000 | [diff] [blame] | 8 | B b = {(A){1, 2, 3, 4}, .a.y[1] = 5}; |
| 9 | |
| 10 | union U { |
| 11 | int n; |
| 12 | float f; |
| 13 | }; |
| 14 | struct C { |
| 15 | int x; |
| 16 | U u[3]; |
| 17 | }; |
| 18 | struct D { |
| 19 | C c; |
| 20 | }; |
| 21 | |
| 22 | // CHECK: @d1 = {{.*}} { i32 1, [3 x %[[U:.*]]] [%[[U]] { i32 2 }, %[[U]] { i32 5 }, %[[U]] { i32 4 }] } |
| 23 | D d1 = {(C){1, {{.n=2}, {.f=3}, {.n=4}}}, .c.u[1].n = 5}; |
| 24 | |
| 25 | // CHECK: @d2 = {{.*}} { i32 1, { %[[U]], float, %[[U]] } { %[[U]] { i32 2 }, float 5.{{0*}}e+00, %[[U]] { i32 4 } } } |
| 26 | D d2 = {(C){1, 2, 3, 4}, .c.u[1].f = 5}; |
| 27 | |
| 28 | struct Bitfield { |
| 29 | int a : 3; |
| 30 | int b : 4; |
| 31 | int c : 5; |
| 32 | }; |
| 33 | struct WithBitfield { |
| 34 | int n; |
| 35 | Bitfield b; |
| 36 | }; |
| 37 | // CHECK: @bitfield = {{.*}} { i32 1, { i8, i8, [2 x i8] } { i8 42, i8 2, [2 x i8] undef } } |
| 38 | WithBitfield bitfield = {1, (Bitfield){2, 3, 4}, .b.b = 5}; |
| 39 | |
| 40 | struct String { |
| 41 | const char buffer[12]; |
| 42 | }; |
| 43 | struct WithString { |
| 44 | String str; |
| 45 | }; |
| 46 | // CHECK: @string = {{.*}} [12 x i8] c"Hello World\00" } } |
| 47 | WithString string = {(String){"hello world"}, .str.buffer[0] = 'H', .str.buffer[6] = 'W'}; |
| 48 | |
| 49 | struct LargeArray { |
| 50 | int arr[4096]; |
| 51 | }; |
| 52 | struct WithLargeArray { |
| 53 | LargeArray arr; |
| 54 | }; |
Fangrui Song | dbc96b5 | 2020-02-03 10:09:39 -0800 | [diff] [blame] | 55 | // 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 }> } } |
Richard Smith | 5745feb | 2019-06-17 21:08:30 +0000 | [diff] [blame] | 56 | WithLargeArray large = {(LargeArray){1, 2, 3}, .arr.arr[10] = 10}; |
| 57 | |
| 58 | union OverwritePaddingWithBitfield { |
| 59 | struct Padding { unsigned : 8; char c; } padding; |
| 60 | char bitfield : 3; |
| 61 | }; |
| 62 | struct WithOverwritePaddingWithBitfield { |
| 63 | OverwritePaddingWithBitfield a; |
| 64 | }; |
Fangrui Song | dbc96b5 | 2020-02-03 10:09:39 -0800 | [diff] [blame] | 65 | // CHECK: @overwrite_padding = global { { i8, i8 } } { { i8, i8 } { i8 3, i8 1 } } |
Richard Smith | 5745feb | 2019-06-17 21:08:30 +0000 | [diff] [blame] | 66 | WithOverwritePaddingWithBitfield overwrite_padding = {(OverwritePaddingWithBitfield){1}, .a.bitfield = 3}; |