// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -emit-llvm %s -o - | FileCheck %s

struct A {
  A(); A(const A&); A(A&&); A &operator=(const A&); A &operator=(A&&); ~A();
};
struct B {
  B(); B(const B&); B(B&&); B &operator=(const B&); B &operator=(B&&); ~B();
};

union U {
  U();
  U(const U &);
  U(U &&);
  U &operator=(const U&);
  U &operator=(U&&);
  ~U();

  A a;
  int n;
};

// CHECK-NOT: _ZN1A
U::U() {}
U::U(const U&) {}
U::U(U&&) {}
U &U::operator=(const U&) { return *this; }
U &U::operator=(U &&) { return *this; }
U::~U() {}

struct S {
  S();
  S(const S &);
  S(S &&);
  S &operator=(const S&);
  S &operator=(S&&);
  ~S();

  union {
    A a;
    int n;
  };
  B b;
  int m;
};

// CHECK: _ZN1SC2Ev
// CHECK-NOT: _ZN1A
// CHECK: _ZN1BC1Ev
S::S() {}

// CHECK-NOT: _ZN1A

// CHECK: _ZN1SC2ERKS_
// CHECK-NOT: _ZN1A
// CHECK: _ZN1BC1Ev
S::S(const S&) {}

// CHECK-NOT: _ZN1A

// CHECK: _ZN1SC2EOS_
// CHECK-NOT: _ZN1A
// CHECK: _ZN1BC1Ev
S::S(S&&) {}

// CHECK-NOT: _ZN1A
// CHECK-NOT: _ZN1B
S &S::operator=(const S&) { return *this; }

S &S::operator=(S &&) { return *this; }

// CHECK: _ZN1SD2Ev
// CHECK-NOT: _ZN1A
// CHECK: _ZN1BD1Ev
S::~S() {}

// CHECK-NOT: _ZN1A
