1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -emit-llvm -o %t %s
2d029cbbd18689a8110ea47aa33ed3387a7cf3674Rafael Espindola// RUN: not grep "_ZN1XaSERK1X" %t
3ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian
4ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanianextern "C" int printf(...);
5ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian
66dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanianstruct B {
7eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian  B() : B1(3.14), B2(3.15), auB2(3.16)  {}
86dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  float B1;
96dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  float B2;
106dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  void pr() {
11eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian    printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1);
126dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  }
13eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian
14eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian  union {
15eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian    float auB1;
16eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian    float auB2;
17eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian  };
186dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian};
196dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian
206dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanianstruct M {
21eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian  M() : M1(10), M2(11) , auM1(12) {}
226dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  int M1;
236dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  int M2;
246dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  void pr() {
25eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian    printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2);
266dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  }
27eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian  union {
28eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian    int auM1;
29eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian    int auM2;
30eea0a5c6e347842fcfdd371f27c0e3b8fc644ee7Fariborz Jahanian  };
316dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian};
326dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian
336dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanianstruct N  : B {
346dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  N() : N1(20), N2(21) {}
356dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  int N1;
366dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  int N2;
376dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  void pr() {
386dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian    printf("N1 = %d N2 = %d\n", N1, N2);
396dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian    B::pr();
406dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  }
416dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian};
426dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian
436dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanianstruct Q {
446dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  Q() : Q1(30), Q2(31) {}
456dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  int Q1;
466dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  int Q2;
476dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  void pr() {
486dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian    printf("Q1 = %d Q2 = %d\n", Q1, Q2);
496dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian  }
506dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian};
516dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian
526dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian
536dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanianstruct X : M , N {
54ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {}
55ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  double d;
56ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  double d1;
57ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  double d2;
58ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  double d3;
59ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  void pr() {
60ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian    printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3);
616dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian    M::pr(); N::pr();
626dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian    q1.pr(); q2.pr();
63ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  }
646dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian
656dee5d81a6d43b1ff03fe47ab180a45bee44b371Fariborz Jahanian Q q1, q2;
66ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian};
67ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian
68ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian
69ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz JahanianX srcX;
70ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz JahanianX dstX;
71ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz JahanianX dstY;
72ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian
73ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanianint main() {
74ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  dstY = dstX = srcX;
75ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  srcX.pr();
76ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  dstX.pr();
77ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian  dstY.pr();
78ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian}
79ad25883a644dd6b52c7923dd128a7d05fb26213cFariborz Jahanian
80