xref: /llvm-project/clang/test/CodeGenCXX/designated-init.cpp (revision fd739804e0591468762eb87488a497a3f7d4afb0)
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