| // RUN: %clang_cc1 --std=c++17 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck %s |
| |
| struct non_trivial_constructor { |
| constexpr non_trivial_constructor() : x(100) { } |
| int x; |
| }; |
| |
| union UnionInt { |
| int a{1000}; |
| non_trivial_constructor b; |
| }; |
| |
| union UnionNonTrivial { |
| int a; |
| non_trivial_constructor b{}; |
| }; |
| |
| void f() { |
| UnionInt u1; |
| UnionNonTrivial u2; |
| } |
| |
| // CHECK: define dso_local void @_Z1fv() |
| // CHECK: call void @_ZN8UnionIntC1Ev |
| // CHECK-NEXT: call void @_ZN15UnionNonTrivialC1Ev |
| |
| // CHECK: define {{.*}}void @_ZN8UnionIntC1Ev |
| // CHECK: call void @_ZN8UnionIntC2Ev |
| |
| // CHECK: define {{.*}}void @_ZN15UnionNonTrivialC1Ev |
| // CHECK: call void @_ZN15UnionNonTrivialC2Ev |
| |
| // CHECK: define {{.*}}void @_ZN8UnionIntC2Ev |
| // CHECK: store i32 1000 |
| |
| // CHECK: define {{.*}}void @_ZN15UnionNonTrivialC2Ev |
| // CHECK: call void @_ZN23non_trivial_constructorC1Ev |