PHIOPT: move factor_out_conditional_operation over to use gimple_match_op
[official-gcc.git] / gcc / testsuite / g++.dg / abi / pr77728-2.C
blobffe6910bd91d339a9062c67ce367fd17e917985a
1 // { dg-do compile { target { { aarch64-*-* } && c++11 } } }
2 // { dg-options "" }
4 #include <stdarg.h>
6 template <int N>
7 struct alignas (16) A { char p[16]; };
9 A<0> v;
11 template <int N>
12 struct B
14   typedef A<N> T;
15   int i, j, k, l;
18 struct C : public B<0> {};
19 struct D {};
20 struct E : public D, C {};
21 struct F : public B<1> {};
22 struct G : public F { static int y alignas (16); };
23 struct H : public G {};
24 struct I : public D { int z alignas (16); };
25 struct J : public D { static int z alignas (16); int i, j, k, l; };
27 template <int N>
28 struct K : public D { typedef A<N> T; int i, j; };
30 struct L { static int h alignas (16); int i, j, k, l; };
32 int
33 fn1 (int a, B<0> b)
35   return a + b.i;
38 int
39 fn2 (int a, B<1> b)
41   return a + b.i;
44 int
45 fn3 (int a, L b)
47   return a + b.i;
50 int
51 fn4 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, B<0> n, ...)
53   va_list ap;
54   va_start (ap, n);
55   int x = va_arg (ap, int);
56   va_end (ap);
57   return x;
60 int
61 fn5 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, B<1> n, ...)
63   va_list ap;
64   va_start (ap, n);
65   int x = va_arg (ap, int);
66   va_end (ap);
67   return x;
70 int
71 fn6 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, C n, ...)
73   va_list ap;
74   va_start (ap, n);
75   int x = va_arg (ap, int);
76   va_end (ap);
77   return x;
80 int
81 fn7 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, E n, ...)
83   va_list ap;
84   va_start (ap, n);
85   int x = va_arg (ap, int);
86   va_end (ap);
87   return x;
90 int
91 fn8 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, H n, ...)
93   va_list ap;
94   va_start (ap, n);
95   int x = va_arg (ap, int);
96   va_end (ap);
97   return x;
101 fn9 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, I n, ...)
103   va_list ap;
104   va_start (ap, n);
105   int x = va_arg (ap, int);
106   va_end (ap);
107   return x;
111 fn10 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, J n, ...)
113   va_list ap;
114   va_start (ap, n);
115   int x = va_arg (ap, int);
116   va_end (ap);
117   return x;
121 fn11 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, K<0> n, ...)
123   va_list ap;
124   va_start (ap, n);
125   int x = va_arg (ap, int);
126   va_end (ap);
127   return x;
131 fn12 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, K<2> n, ...)
133   va_list ap;
134   va_start (ap, n);
135   int x = va_arg (ap, int);
136   va_end (ap);
137   return x;
140 void
141 test ()
143   static B<0> b0;
144   static B<1> b1;
145   static L l;
146   static C c;
147   static E e;
148   static H h;
149   static I i;
150   static J j;
151   static K<0> k0;
152   static K<2> k2;
153   fn1 (1, b0);
154   fn2 (1, b1);
155   fn3 (1, l);
156   fn4 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, b0, 1, 2, 3, 4);
157   fn5 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, b1, 1, 2, 3, 4);
158   fn6 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, c, 1, 2, 3, 4);
159   fn7 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, e, 1, 2, 3, 4);
160   fn8 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, h, 1, 2, 3, 4);
161   fn9 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, i, 1, 2, 3, 4);
162   fn10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, j, 1, 2, 3, 4);
163   fn11 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, k0, 1, 2, 3, 4);
164   fn12 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, k2, 1, 2, 3, 4);