xref: /aosp_15_r20/external/clang/test/CodeGenCXX/copy-assign-synthesis.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm -o %t %s
2*67e74705SXin Li // RUN: not grep "_ZN1XaSERK1X" %t
3*67e74705SXin Li 
4*67e74705SXin Li extern "C" int printf(...);
5*67e74705SXin Li 
6*67e74705SXin Li struct B {
BB7*67e74705SXin Li   B() : B1(3.14), B2(3.15), auB2(3.16)  {}
8*67e74705SXin Li   float B1;
9*67e74705SXin Li   float B2;
prB10*67e74705SXin Li   void pr() {
11*67e74705SXin Li     printf("B1 = %f B2 = %f auB1 = %f\n", B1, B2, auB1);
12*67e74705SXin Li   }
13*67e74705SXin Li 
14*67e74705SXin Li   union {
15*67e74705SXin Li     float auB1;
16*67e74705SXin Li     float auB2;
17*67e74705SXin Li   };
18*67e74705SXin Li };
19*67e74705SXin Li 
20*67e74705SXin Li struct M {
MM21*67e74705SXin Li   M() : M1(10), M2(11) , auM1(12) {}
22*67e74705SXin Li   int M1;
23*67e74705SXin Li   int M2;
prM24*67e74705SXin Li   void pr() {
25*67e74705SXin Li     printf("M1 = %d M2 = %d auM1 = %d auM2 = %d\n", M1, M2, auM1, auM2);
26*67e74705SXin Li   }
27*67e74705SXin Li   union {
28*67e74705SXin Li     int auM1;
29*67e74705SXin Li     int auM2;
30*67e74705SXin Li   };
31*67e74705SXin Li };
32*67e74705SXin Li 
33*67e74705SXin Li struct N  : B {
NN34*67e74705SXin Li   N() : N1(20), N2(21) {}
35*67e74705SXin Li   int N1;
36*67e74705SXin Li   int N2;
prN37*67e74705SXin Li   void pr() {
38*67e74705SXin Li     printf("N1 = %d N2 = %d\n", N1, N2);
39*67e74705SXin Li     B::pr();
40*67e74705SXin Li   }
41*67e74705SXin Li };
42*67e74705SXin Li 
43*67e74705SXin Li struct Q {
QQ44*67e74705SXin Li   Q() : Q1(30), Q2(31) {}
45*67e74705SXin Li   int Q1;
46*67e74705SXin Li   int Q2;
prQ47*67e74705SXin Li   void pr() {
48*67e74705SXin Li     printf("Q1 = %d Q2 = %d\n", Q1, Q2);
49*67e74705SXin Li   }
50*67e74705SXin Li };
51*67e74705SXin Li 
52*67e74705SXin Li 
53*67e74705SXin Li struct X : M , N {
XX54*67e74705SXin Li   X() : d(0.0), d1(1.1), d2(1.2), d3(1.3) {}
55*67e74705SXin Li   double d;
56*67e74705SXin Li   double d1;
57*67e74705SXin Li   double d2;
58*67e74705SXin Li   double d3;
prX59*67e74705SXin Li   void pr() {
60*67e74705SXin Li     printf("d = %f d1 = %f d2 = %f d3 = %f\n", d, d1,d2,d3);
61*67e74705SXin Li     M::pr(); N::pr();
62*67e74705SXin Li     q1.pr(); q2.pr();
63*67e74705SXin Li   }
64*67e74705SXin Li 
65*67e74705SXin Li  Q q1, q2;
66*67e74705SXin Li };
67*67e74705SXin Li 
68*67e74705SXin Li 
69*67e74705SXin Li X srcX;
70*67e74705SXin Li X dstX;
71*67e74705SXin Li X dstY;
72*67e74705SXin Li 
main()73*67e74705SXin Li int main() {
74*67e74705SXin Li   dstY = dstX = srcX;
75*67e74705SXin Li   srcX.pr();
76*67e74705SXin Li   dstX.pr();
77*67e74705SXin Li   dstY.pr();
78*67e74705SXin Li }
79*67e74705SXin Li 
80