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