xref: /llvm-project/clang/test/CodeGen/union-non-trivial-member.cpp (revision 765d8a192180f8f33618087b15c022fe758044af)
1 // RUN: %clang_cc1 --std=c++17 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck %s
2 
3 struct non_trivial_constructor {
non_trivial_constructornon_trivial_constructor4     constexpr non_trivial_constructor() : x(100) { }
5     int x;
6 };
7 
8 union UnionInt {
9     int a{1000};
10     non_trivial_constructor b;
11 };
12 
13 union UnionNonTrivial {
14     int a;
15     non_trivial_constructor b{};
16 };
17 
f()18 void f() {
19     UnionInt u1;
20     UnionNonTrivial u2;
21 }
22 
23 // CHECK:      define dso_local void @_Z1fv()
24 // CHECK:        call void @_ZN8UnionIntC1Ev
25 // CHECK-NEXT:   call void @_ZN15UnionNonTrivialC1Ev
26 
27 // CHECK:      define {{.*}}void @_ZN8UnionIntC1Ev
28 // CHECK:        call void @_ZN8UnionIntC2Ev
29 
30 // CHECK:      define {{.*}}void @_ZN15UnionNonTrivialC1Ev
31 // CHECK:        call void @_ZN15UnionNonTrivialC2Ev
32 
33 // CHECK:      define {{.*}}void @_ZN8UnionIntC2Ev
34 // CHECK:        store i32 1000
35 
36 // CHECK:      define {{.*}}void @_ZN15UnionNonTrivialC2Ev
37 // CHECK:        call void @_ZN23non_trivial_constructorC1Ev
38