55 lines · cpp
1// RUN: %clang_cc1 --std=c++17 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck %s2 3struct non_trivial_constructor {4 constexpr non_trivial_constructor() : x(100) { }5 int x;6};7 8union UnionInt {9 int a{1000};10 non_trivial_constructor b;11};12 13union UnionNonTrivial {14 int a;15 non_trivial_constructor b{};16};17 18struct Handle {19 Handle(int) {}20};21 22union UnionNonTrivialEqualInit {23 int NoState = 0;24 Handle CustomState;25};26 27void f() {28 UnionInt u1;29 UnionNonTrivial u2;30 UnionNonTrivialEqualInit u3;31}32 33// CHECK: define dso_local void @_Z1fv()34// CHECK: call void @_ZN8UnionIntC1Ev35// CHECK-NEXT: call void @_ZN15UnionNonTrivialC1Ev36// CHECK-NEXT: call void @_ZN24UnionNonTrivialEqualInitC1Ev37 38// CHECK: define {{.*}}void @_ZN8UnionIntC1Ev39// CHECK: call void @_ZN8UnionIntC2Ev40 41// CHECK: define {{.*}}void @_ZN15UnionNonTrivialC1Ev42// CHECK: call void @_ZN15UnionNonTrivialC2Ev43 44// CHECK: define {{.*}}void @_ZN24UnionNonTrivialEqualInitC1Ev45// CHECK: call void @_ZN24UnionNonTrivialEqualInitC2Ev46 47// CHECK: define {{.*}}void @_ZN8UnionIntC2Ev48// CHECK: store i32 100049 50// CHECK: define {{.*}}void @_ZN15UnionNonTrivialC2Ev51// CHECK: call void @_ZN23non_trivial_constructorC1Ev52 53// CHECK: define {{.*}}void @_ZN24UnionNonTrivialEqualInitC2Ev54// CHECK: store i32 055