copy-assign-synthesis-1.cpp revision 183d7181fd59842ac969cbc6fe0376f85dc63ae4
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); 44183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian B::pr(); 45183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian } 46183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian N& operator=(const N& arg) { N1 = arg.N1; N2 = arg.N2; 47183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian return *this; } 48183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian}; 49183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 50183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct Q : B { 51183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian Q() : Q1(30), Q2(31) {} 52183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian int Q1; 53183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian int Q2; 54183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian void pr() { 55183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian printf("Q1 = %d Q2 = %d\n", Q1, Q2); 56183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian } 57183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian}; 58183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 59183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 60183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianstruct X : M , N { 61183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {} 62183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian double d; 63183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian double d1; 64183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian double d2; 65183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian double d3; 66183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian void pr() { 67183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3); 68183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian M::pr(); N::pr(); 69183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian q1.pr(); q2.pr(); 70183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian } 71183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 72183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian Q q1, q2; 73183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian}; 74183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 75183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 76183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX srcX; 77183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX dstX; 78183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz JahanianX dstY; 79183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 80183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanianint main() { 81183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian dstY = dstX = srcX; 82183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian srcX.pr(); 83183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian dstX.pr(); 84183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian dstY.pr(); 85183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian} 86183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 87183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .globl __ZN1XaSERK1X 88183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .weak_definition __ZN1XaSERK1X 89183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: __ZN1XaSERK1X: 90183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .globl __ZN1QaSERK1Q 91183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: .weak_definition __ZN1QaSERK1Q 92183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP64: __ZN1QaSERK1Q: 93183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 94183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .globl __ZN1XaSERK1X 95183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .weak_definition __ZN1XaSERK1X 96183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: __ZN1XaSERK1X: 97183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .globl __ZN1QaSERK1Q 98183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: .weak_definition __ZN1QaSERK1Q 99183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian// CHECK-LP32: __ZN1QaSERK1Q: 100183d7181fd59842ac969cbc6fe0376f85dc63ae4Fariborz Jahanian 101