1 | // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -emit-llvm %s -o - | FileCheck %s |
2 | |
3 | struct A { |
4 | A(); A(const A&); A(A&&); A &operator=(const A&); A &operator=(A&&); ~A(); |
5 | }; |
6 | struct B { |
7 | B(); B(const B&); B(B&&); B &operator=(const B&); B &operator=(B&&); ~B(); |
8 | }; |
9 | |
10 | union U { |
11 | U(); |
12 | U(const U &); |
13 | U(U &&); |
14 | U &operator=(const U&); |
15 | U &operator=(U&&); |
16 | ~U(); |
17 | |
18 | A a; |
19 | int n; |
20 | }; |
21 | |
22 | // CHECK-NOT: _ZN1A |
23 | U::U() {} |
24 | U::U(const U&) {} |
25 | U::U(U&&) {} |
26 | U &U::operator=(const U&) { return *this; } |
27 | U &U::operator=(U &&) { return *this; } |
28 | U::~U() {} |
29 | |
30 | struct S { |
31 | S(); |
32 | S(const S &); |
33 | S(S &&); |
34 | S &operator=(const S&); |
35 | S &operator=(S&&); |
36 | ~S(); |
37 | |
38 | union { |
39 | A a; |
40 | int n; |
41 | }; |
42 | B b; |
43 | int m; |
44 | }; |
45 | |
46 | // CHECK: _ZN1SC2Ev |
47 | // CHECK-NOT: _ZN1A |
48 | // CHECK: _ZN1BC1Ev |
49 | S::S() {} |
50 | |
51 | // CHECK-NOT: _ZN1A |
52 | |
53 | // CHECK: _ZN1SC2ERKS_ |
54 | // CHECK-NOT: _ZN1A |
55 | // CHECK: _ZN1BC1Ev |
56 | S::S(const S&) {} |
57 | |
58 | // CHECK-NOT: _ZN1A |
59 | |
60 | // CHECK: _ZN1SC2EOS_ |
61 | // CHECK-NOT: _ZN1A |
62 | // CHECK: _ZN1BC1Ev |
63 | S::S(S&&) {} |
64 | |
65 | // CHECK-NOT: _ZN1A |
66 | // CHECK-NOT: _ZN1B |
67 | S &S::operator=(const S&) { return *this; } |
68 | |
69 | S &S::operator=(S &&) { return *this; } |
70 | |
71 | // CHECK: _ZN1SD2Ev |
72 | // CHECK-NOT: _ZN1A |
73 | // CHECK: _ZN1BD1Ev |
74 | S::~S() {} |
75 | |
76 | // CHECK-NOT: _ZN1A |
77 | |