copy-assign-synthesis-1.cpp revision ef8225444452a1486bd721f3285301fe84643b00
1b7bc66acc511c85a22eb608957714c80c3428116Rafael Espindola// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm %s -o - | \
2b7bc66acc511c85a22eb608957714c80c3428116Rafael Espindola// RUN: FileCheck %s
3b7bc66acc511c85a22eb608957714c80c3428116Rafael Espindola// RUN: %clang_cc1 -triple i386-apple-darwin -std=c++11 -emit-llvm %s -o - | \
4b7bc66acc511c85a22eb608957714c80c3428116Rafael Espindola// RUN: FileCheck %s
5183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
6183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianextern "C" int printf(...);
7183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
8183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct B {
9183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  B() : B1(3.14), B2(3.15), auB2(3.16)  {}
10183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  float B1;
11183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  float B2;
12183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
13183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1);
14183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
15183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
16183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  B& operator=(const B& arg) { B1 = arg.B1; B2 = arg.B2;
17183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian                               auB1 = arg.auB1; return *this; }
18183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  union {
19183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    float auB1;
20183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    float auB2;
21183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  };
22183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
23183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
24183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct M {
25183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  M() : M1(10), M2(11) , auM1(12) {}
26183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int M1;
27183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int M2;
28183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
29183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2);
30183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
31183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  union {
32183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    int auM1;
33183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    int auM2;
34183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  };
35183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
36183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
37183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct N  : B {
38183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  N() : N1(20), N2(21) {}
39183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int N1;
40183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int N2;
41183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
42183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("N1 = %d N2 = %d\n", N1, N2);
43c28bbc2d2271aab6c5d79ef2758604221cd92a4bFariborz Jahanian    for (unsigned i = 0; i < 3; i++)
44c28bbc2d2271aab6c5d79ef2758604221cd92a4bFariborz Jahanian      for (unsigned j = 0; j < 2; j++)
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        printf("arr_b[%d][%d] = %f\n", i,j,arr_b[i][j].B1);
46183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    B::pr();
47183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  N& operator=(const N& arg) {
491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    N1 = arg.N1; N2 = arg.N2;
501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    for (unsigned i = 0; i < 3; i++)
511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      for (unsigned j = 0; j < 2; j++)
521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        arr_b[i][j] = arg.arr_b[i][j];
531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    return *this;
541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  }
55c28bbc2d2271aab6c5d79ef2758604221cd92a4bFariborz Jahanian  B arr_b[3][2];
56183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
57183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
58183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct Q  : B {
59183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  Q() : Q1(30), Q2(31) {}
60183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int Q1;
61183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int Q2;
62183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
63183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("Q1 = %d Q2 = %d\n", Q1, Q2);
64183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
65183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
66183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
67183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
68183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct X : M , N {
69183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {}
70183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d;
71183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d1;
72183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d2;
73183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d3;
74183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
75183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3);
76183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    M::pr(); N::pr();
77183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    q1.pr(); q2.pr();
78183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
79183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
80183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian Q q1, q2;
81183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
82183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
83183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
84183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX srcX;
85183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX dstX;
86183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX dstY;
87183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
88183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianint main() {
89183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  dstY = dstX = srcX;
90183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  srcX.pr();
91183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  dstX.pr();
92183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  dstY.pr();
93183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian}
94183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
95ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: define linkonce_odr nonnull %struct.X* @_ZN1XaSERKS_
96