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