copy-assign-synthesis-1.cpp revision 1eb4433ac451dc16f4133a88af2d002ac26c58ef
1183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -S %s -o %t-64.s &&
2183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s &&
3183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// RUN: clang-cc -triple i386-apple-darwin -std=c++0x -S %s -o %t-32.s &&
4183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// RUN: FileCheck -check-prefix LP32 --input-file=%t-32.s %s &&
5183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// RUN: true
6183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
7183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianextern "C" int printf(...);
8183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
9183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct B {
10183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  B() : B1(3.14), B2(3.15), auB2(3.16)  {}
11183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  float B1;
12183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  float B2;
13183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
14183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1);
15183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
16183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
17183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  B& operator=(const B& arg) { B1 = arg.B1; B2 = arg.B2;
18183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian                               auB1 = arg.auB1; return *this; }
19183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  union {
20183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    float auB1;
21183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    float auB2;
22183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  };
23183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
24183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
25183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct M {
26183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  M() : M1(10), M2(11) , auM1(12) {}
27183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int M1;
28183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int M2;
29183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
30183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2);
31183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
32183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  union {
33183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    int auM1;
34183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    int auM2;
35183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  };
36183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
37183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
38183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct N  : B {
39183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  N() : N1(20), N2(21) {}
40183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int N1;
41183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int N2;
42183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
43183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("N1 = %d N2 = %d\n", N1, N2);
44c28bbc2d2271aab6c5d79ef2758604221cd92a4bFariborz Jahanian    for (unsigned i = 0; i < 3; i++)
45c28bbc2d2271aab6c5d79ef2758604221cd92a4bFariborz Jahanian      for (unsigned j = 0; j < 2; j++)
461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        printf("arr_b[%d][%d] = %f\n", i,j,arr_b[i][j].B1);
47183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    B::pr();
48183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  N& operator=(const N& arg) {
501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    N1 = arg.N1; N2 = arg.N2;
511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    for (unsigned i = 0; i < 3; i++)
521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      for (unsigned j = 0; j < 2; j++)
531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        arr_b[i][j] = arg.arr_b[i][j];
541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    return *this;
551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  }
56c28bbc2d2271aab6c5d79ef2758604221cd92a4bFariborz Jahanian  B arr_b[3][2];
57183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
58183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
59183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct Q  : B {
60183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  Q() : Q1(30), Q2(31) {}
61183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int Q1;
62183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  int Q2;
63183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
64183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("Q1 = %d Q2 = %d\n", Q1, Q2);
65183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
66183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
67183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
68183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
69183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct X : M , N {
70183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {}
71183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d;
72183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d1;
73183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d2;
74183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  double d3;
75183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  void pr() {
76183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3);
77183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    M::pr(); N::pr();
78183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian    q1.pr(); q2.pr();
79183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  }
80183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
81183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian Q q1, q2;
82183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian};
83183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
84183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
85183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX srcX;
86183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX dstX;
87183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX dstY;
88183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
89183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianint main() {
90183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  dstY = dstX = srcX;
91183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  srcX.pr();
92183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  dstX.pr();
93183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian  dstY.pr();
94183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian}
95183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
96183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .globl   __ZN1XaSERK1X
97183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .weak_definition  __ZN1XaSERK1X
98183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: __ZN1XaSERK1X:
99183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .globl   __ZN1QaSERK1Q
100183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .weak_definition  __ZN1QaSERK1Q
101183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: __ZN1QaSERK1Q:
102183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
103183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .globl   __ZN1XaSERK1X
104183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .weak_definition  __ZN1XaSERK1X
105183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: __ZN1XaSERK1X:
106183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .globl   __ZN1QaSERK1Q
107183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .weak_definition  __ZN1QaSERK1Q
108183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: __ZN1QaSERK1Q:
109183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian
110