xref: /llvm-project/clang/test/CodeGenCXX/copy-assign-synthesis.cpp (revision be8a91b771dfd0cc63f24a417c618f6df6464051)
18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -emit-llvm -o %t %s
2*be8a91b7SRafael Espindola // RUN: not grep "_ZN1XaSERK1X" %t
34985b33fSFariborz Jahanian 
44985b33fSFariborz Jahanian extern "C" int printf(...);
54985b33fSFariborz Jahanian 
689d01eb3SFariborz Jahanian struct B {
BB73d693b22SFariborz Jahanian   B() : B1(3.14), B2(3.15), auB2(3.16)  {}
889d01eb3SFariborz Jahanian   float B1;
989d01eb3SFariborz Jahanian   float B2;
prB1089d01eb3SFariborz Jahanian   void pr() {
113d693b22SFariborz Jahanian     printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1);
1289d01eb3SFariborz Jahanian   }
133d693b22SFariborz Jahanian 
143d693b22SFariborz Jahanian   union {
153d693b22SFariborz Jahanian     float auB1;
163d693b22SFariborz Jahanian     float auB2;
173d693b22SFariborz Jahanian   };
1889d01eb3SFariborz Jahanian };
1989d01eb3SFariborz Jahanian 
2089d01eb3SFariborz Jahanian struct M {
MM213d693b22SFariborz Jahanian   M() : M1(10), M2(11) , auM1(12) {}
2289d01eb3SFariborz Jahanian   int M1;
2389d01eb3SFariborz Jahanian   int M2;
prM2489d01eb3SFariborz Jahanian   void pr() {
253d693b22SFariborz Jahanian     printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2);
2689d01eb3SFariborz Jahanian   }
273d693b22SFariborz Jahanian   union {
283d693b22SFariborz Jahanian     int auM1;
293d693b22SFariborz Jahanian     int auM2;
303d693b22SFariborz Jahanian   };
3189d01eb3SFariborz Jahanian };
3289d01eb3SFariborz Jahanian 
3389d01eb3SFariborz Jahanian struct N  : B {
NN3489d01eb3SFariborz Jahanian   N() : N1(20), N2(21) {}
3589d01eb3SFariborz Jahanian   int N1;
3689d01eb3SFariborz Jahanian   int N2;
prN3789d01eb3SFariborz Jahanian   void pr() {
3889d01eb3SFariborz Jahanian     printf("N1 = %d N2 = %d\n", N1, N2);
3989d01eb3SFariborz Jahanian     B::pr();
4089d01eb3SFariborz Jahanian   }
4189d01eb3SFariborz Jahanian };
4289d01eb3SFariborz Jahanian 
4389d01eb3SFariborz Jahanian struct Q {
QQ4489d01eb3SFariborz Jahanian   Q() : Q1(30), Q2(31) {}
4589d01eb3SFariborz Jahanian   int Q1;
4689d01eb3SFariborz Jahanian   int Q2;
prQ4789d01eb3SFariborz Jahanian   void pr() {
4889d01eb3SFariborz Jahanian     printf("Q1 = %d Q2 = %d\n", Q1, Q2);
4989d01eb3SFariborz Jahanian   }
5089d01eb3SFariborz Jahanian };
5189d01eb3SFariborz Jahanian 
5289d01eb3SFariborz Jahanian 
5389d01eb3SFariborz Jahanian struct X : M , N {
XX544985b33fSFariborz Jahanian   X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {}
554985b33fSFariborz Jahanian   double d;
564985b33fSFariborz Jahanian   double d1;
574985b33fSFariborz Jahanian   double d2;
584985b33fSFariborz Jahanian   double d3;
prX594985b33fSFariborz Jahanian   void pr() {
604985b33fSFariborz Jahanian     printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3);
6189d01eb3SFariborz Jahanian     M::pr(); N::pr();
6289d01eb3SFariborz Jahanian     q1.pr(); q2.pr();
634985b33fSFariborz Jahanian   }
6489d01eb3SFariborz Jahanian 
6589d01eb3SFariborz Jahanian  Q q1, q2;
664985b33fSFariborz Jahanian };
674985b33fSFariborz Jahanian 
684985b33fSFariborz Jahanian 
694985b33fSFariborz Jahanian X srcX;
704985b33fSFariborz Jahanian X dstX;
714985b33fSFariborz Jahanian X dstY;
724985b33fSFariborz Jahanian 
main()734985b33fSFariborz Jahanian int main() {
744985b33fSFariborz Jahanian   dstY = dstX = srcX;
754985b33fSFariborz Jahanian   srcX.pr();
764985b33fSFariborz Jahanian   dstX.pr();
774985b33fSFariborz Jahanian   dstY.pr();
784985b33fSFariborz Jahanian }
794985b33fSFariborz Jahanian 
80