// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm %s -o - | \
// RUN: FileCheck %s
// RUN: %clang_cc1 -triple i386-apple-darwin -std=c++11 -emit-llvm %s -o - | \
// RUN: FileCheck %s

extern "C" int printf(...);

struct B {
  B() : B1(3.14), B2(3.15), auB2(3.16)  {} 
  float B1;
  float B2;
  void pr() {
    printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1);
  }

  B& operator=(const B& arg) { B1 = arg.B1; B2 = arg.B2; 
                               auB1 = arg.auB1; return *this; }
  union {
    float auB1;
    float auB2;
  };
};

struct M {
  M() : M1(10), M2(11) , auM1(12) {} 
  int M1;
  int M2;
  void pr() {
    printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2);
  }
  union {
    int auM1;
    int auM2;
  };
};

struct N  : B {
  N() : N1(20), N2(21) {} 
  int N1;
  int N2;
  void pr() {
    printf("N1 = %d N2 = %d\n", N1, N2);
    for (unsigned i = 0; i < 3; i++)
      for (unsigned j = 0; j < 2; j++)
        printf("arr_b[%d][%d] = %f\n", i,j,arr_b[i][j].B1);
    B::pr();
  }
  N& operator=(const N& arg) {
    N1 = arg.N1; N2 = arg.N2; 
    for (unsigned i = 0; i < 3; i++)
      for (unsigned j = 0; j < 2; j++)
        arr_b[i][j] = arg.arr_b[i][j];
    return *this;
  }
  B arr_b[3][2];
};

struct Q  : B {
  Q() : Q1(30), Q2(31) {} 
  int Q1;
  int Q2;
  void pr() {
    printf("Q1 = %d Q2 = %d\n", Q1, Q2);
  }
};


struct X : M , N { 
  X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {}
  double d;
  double d1;
  double d2;
  double d3;
  void pr() {
    printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3);
    M::pr(); N::pr();
    q1.pr(); q2.pr();
  }

 Q q1, q2;
}; 


X srcX; 
X dstX; 
X dstY; 

int main() {
  dstY = dstX = srcX;
  srcX.pr();
  dstX.pr();
  dstY.pr();
}

// CHECK: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.X* @_ZN1XaSERKS_
