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