1*c9bd88e6SHans Wennborg // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -emit-llvm %s -o - | FileCheck %s 2522fa537SRichard Smith 3522fa537SRichard Smith struct A { 4522fa537SRichard Smith A(); A(const A&); A(A&&); A &operator=(const A&); A &operator=(A&&); ~A(); 5522fa537SRichard Smith }; 6522fa537SRichard Smith struct B { 7522fa537SRichard Smith B(); B(const B&); B(B&&); B &operator=(const B&); B &operator=(B&&); ~B(); 8522fa537SRichard Smith }; 9522fa537SRichard Smith 10522fa537SRichard Smith union U { 11522fa537SRichard Smith U(); 12522fa537SRichard Smith U(const U &); 13522fa537SRichard Smith U(U &&); 14522fa537SRichard Smith U &operator=(const U&); 15522fa537SRichard Smith U &operator=(U&&); 16522fa537SRichard Smith ~U(); 17522fa537SRichard Smith 18522fa537SRichard Smith A a; 19522fa537SRichard Smith int n; 20522fa537SRichard Smith }; 21522fa537SRichard Smith 22522fa537SRichard Smith // CHECK-NOT: _ZN1A U()23522fa537SRichard SmithU::U() {} U(const U &)24522fa537SRichard SmithU::U(const U&) {} U(U &&)25522fa537SRichard SmithU::U(U&&) {} operator =(const U &)26522fa537SRichard SmithU &U::operator=(const U&) { return *this; } operator =(U &&)27522fa537SRichard SmithU &U::operator=(U &&) { return *this; } ~U()28522fa537SRichard SmithU::~U() {} 29522fa537SRichard Smith 30522fa537SRichard Smith struct S { 31522fa537SRichard Smith S(); 32522fa537SRichard Smith S(const S &); 33522fa537SRichard Smith S(S &&); 34522fa537SRichard Smith S &operator=(const S&); 35522fa537SRichard Smith S &operator=(S&&); 36522fa537SRichard Smith ~S(); 37522fa537SRichard Smith 38522fa537SRichard Smith union { 39522fa537SRichard Smith A a; 40522fa537SRichard Smith int n; 41522fa537SRichard Smith }; 42522fa537SRichard Smith B b; 43522fa537SRichard Smith int m; 44522fa537SRichard Smith }; 45522fa537SRichard Smith 46522fa537SRichard Smith // CHECK: _ZN1SC2Ev 47522fa537SRichard Smith // CHECK-NOT: _ZN1A 48522fa537SRichard Smith // CHECK: _ZN1BC1Ev S()49522fa537SRichard SmithS::S() {} 50522fa537SRichard Smith 51522fa537SRichard Smith // CHECK-NOT: _ZN1A 52522fa537SRichard Smith 53522fa537SRichard Smith // CHECK: _ZN1SC2ERKS_ 54522fa537SRichard Smith // CHECK-NOT: _ZN1A 55522fa537SRichard Smith // CHECK: _ZN1BC1Ev S(const S &)56522fa537SRichard SmithS::S(const S&) {} 57522fa537SRichard Smith 58522fa537SRichard Smith // CHECK-NOT: _ZN1A 59522fa537SRichard Smith 60522fa537SRichard Smith // CHECK: _ZN1SC2EOS_ 61522fa537SRichard Smith // CHECK-NOT: _ZN1A 62522fa537SRichard Smith // CHECK: _ZN1BC1Ev S(S &&)63522fa537SRichard SmithS::S(S&&) {} 64522fa537SRichard Smith 65522fa537SRichard Smith // CHECK-NOT: _ZN1A 66522fa537SRichard Smith // CHECK-NOT: _ZN1B operator =(const S &)67522fa537SRichard SmithS &S::operator=(const S&) { return *this; } 68522fa537SRichard Smith operator =(S &&)69522fa537SRichard SmithS &S::operator=(S &&) { return *this; } 70522fa537SRichard Smith 71522fa537SRichard Smith // CHECK: _ZN1SD2Ev 72522fa537SRichard Smith // CHECK-NOT: _ZN1A 73522fa537SRichard Smith // CHECK: _ZN1BD1Ev ~S()74522fa537SRichard SmithS::~S() {} 75522fa537SRichard Smith 76522fa537SRichard Smith // CHECK-NOT: _ZN1A 77