copy-assign-synthesis-1.cpp revision c28bbc2d2271aab6c5d79ef2758604221cd92a4b
1// RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -S %s -o %t-64.s && 2// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s && 3// RUN: clang-cc -triple i386-apple-darwin -std=c++0x -S %s -o %t-32.s && 4// RUN: FileCheck -check-prefix LP32 --input-file=%t-32.s %s && 5// RUN: true 6 7extern "C" int printf(...); 8 9struct B { 10 B() : B1(3.14), B2(3.15), auB2(3.16) {} 11 float B1; 12 float B2; 13 void pr() { 14 printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1); 15 } 16 17 B& operator=(const B& arg) { B1 = arg.B1; B2 = arg.B2; 18 auB1 = arg.auB1; return *this; } 19 union { 20 float auB1; 21 float auB2; 22 }; 23}; 24 25struct M { 26 M() : M1(10), M2(11) , auM1(12) {} 27 int M1; 28 int M2; 29 void pr() { 30 printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2); 31 } 32 union { 33 int auM1; 34 int auM2; 35 }; 36}; 37 38struct N : B { 39 N() : N1(20), N2(21) {} 40 int N1; 41 int N2; 42 void pr() { 43 printf("N1 = %d N2 = %d\n", N1, N2); 44 for (unsigned i = 0; i < 3; i++) 45 for (unsigned j = 0; j < 2; j++) 46 printf("arr_b[%d][%d] = %f\n", i,j,arr_b[i][j].B1); 47 B::pr(); 48 } 49 N& operator=(const N& arg) { N1 = arg.N1; N2 = arg.N2; 50 for (unsigned i = 0; i < 3; i++) 51 for (unsigned j = 0; j < 2; j++) 52 arr_b[i][j] = arg.arr_b[i][j]; 53 return *this; } 54 B arr_b[3][2]; 55}; 56 57struct Q : B { 58 Q() : Q1(30), Q2(31) {} 59 int Q1; 60 int Q2; 61 void pr() { 62 printf("Q1 = %d Q2 = %d\n", Q1, Q2); 63 } 64}; 65 66 67struct X : M , N { 68 X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {} 69 double d; 70 double d1; 71 double d2; 72 double d3; 73 void pr() { 74 printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3); 75 M::pr(); N::pr(); 76 q1.pr(); q2.pr(); 77 } 78 79 Q q1, q2; 80}; 81 82 83X srcX; 84X dstX; 85X dstY; 86 87int main() { 88 dstY = dstX = srcX; 89 srcX.pr(); 90 dstX.pr(); 91 dstY.pr(); 92} 93 94// CHECK-LP64: .globl __ZN1XaSERK1X 95// CHECK-LP64: .weak_definition __ZN1XaSERK1X 96// CHECK-LP64: __ZN1XaSERK1X: 97// CHECK-LP64: .globl __ZN1QaSERK1Q 98// CHECK-LP64: .weak_definition __ZN1QaSERK1Q 99// CHECK-LP64: __ZN1QaSERK1Q: 100 101// CHECK-LP32: .globl __ZN1XaSERK1X 102// CHECK-LP32: .weak_definition __ZN1XaSERK1X 103// CHECK-LP32: __ZN1XaSERK1X: 104// CHECK-LP32: .globl __ZN1QaSERK1Q 105// CHECK-LP32: .weak_definition __ZN1QaSERK1Q 106// CHECK-LP32: __ZN1QaSERK1Q: 107 108