/* PR target/92904 */ #include struct S { long long a, b; }; struct __attribute__((aligned (16))) T { long long a, b; }; struct U { double a, b, c, d; }; struct __attribute__((aligned (32))) V { double a, b, c, d; }; struct W { double a; long long b; }; struct __attribute__((aligned (16))) X { double a; long long b; }; #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ __int128 b; #endif struct S c; struct T d; struct U e; struct V f; struct W g; struct X h; #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ __attribute__((noipa)) __int128 f1 (int x, ...) { __int128 r; va_list ap; va_start (ap, x); while (x--) va_arg (ap, int); r = va_arg (ap, __int128); va_end (ap); return r; } #endif __attribute__((noipa)) struct S f2 (int x, ...) { struct S r; va_list ap; va_start (ap, x); while (x--) va_arg (ap, int); r = va_arg (ap, struct S); va_end (ap); return r; } __attribute__((noipa)) struct T f3 (int x, ...) { struct T r; va_list ap; va_start (ap, x); while (x--) va_arg (ap, int); r = va_arg (ap, struct T); va_end (ap); return r; } #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ __attribute__((noipa)) void f4 (int x, ...) { va_list ap; va_start (ap, x); while (x--) va_arg (ap, int); b = va_arg (ap, __int128); va_end (ap); } #endif __attribute__((noipa)) void f5 (int x, ...) { va_list ap; va_start (ap, x); while (x--) va_arg (ap, int); c = va_arg (ap, struct S); va_end (ap); } __attribute__((noipa)) void f6 (int x, ...) { va_list ap; va_start (ap, x); while (x--) va_arg (ap, int); d = va_arg (ap, struct T); va_end (ap); } __attribute__((noipa)) struct U f7 (int x, ...) { struct U r; va_list ap; va_start (ap, x); while (x--) va_arg (ap, double); r = va_arg (ap, struct U); va_end (ap); return r; } __attribute__((noipa)) struct V f8 (int x, ...) { struct V r; va_list ap; va_start (ap, x); while (x--) va_arg (ap, double); r = va_arg (ap, struct V); va_end (ap); return r; } __attribute__((noipa)) void f9 (int x, ...) { va_list ap; va_start (ap, x); while (x--) va_arg (ap, double); e = va_arg (ap, struct U); va_end (ap); } __attribute__((noipa)) void f10 (int x, ...) { va_list ap; va_start (ap, x); while (x--) va_arg (ap, double); f = va_arg (ap, struct V); va_end (ap); } __attribute__((noipa)) struct W f11 (int x, ...) { struct W r; va_list ap; va_start (ap, x); while (x--) { va_arg (ap, int); va_arg (ap, double); } r = va_arg (ap, struct W); va_end (ap); return r; } __attribute__((noipa)) struct X f12 (int x, ...) { struct X r; va_list ap; va_start (ap, x); while (x--) { va_arg (ap, int); va_arg (ap, double); } r = va_arg (ap, struct X); va_end (ap); return r; } __attribute__((noipa)) void f13 (int x, ...) { va_list ap; va_start (ap, x); while (x--) { va_arg (ap, int); va_arg (ap, double); } g = va_arg (ap, struct W); va_end (ap); } __attribute__((noipa)) void f14 (int x, ...) { va_list ap; va_start (ap, x); while (x--) { va_arg (ap, int); va_arg (ap, double); } h = va_arg (ap, struct X); va_end (ap); } int main () { union Y { #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ __int128 b; #endif struct S c; struct T d; struct U e; struct V f; struct W g; struct X h; } u, v; u.c.a = 0x5555555555555555ULL; u.c.b = 0xaaaaaaaaaaaaaaaaULL; #define C(x) \ do { \ if (u.c.a != x.c.a || u.c.b != x.c.b) __builtin_abort (); \ u.c.a++; \ u.c.b--; \ } while (0) #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ v.b = f1 (0, u.b); C (v); v.b = f1 (1, 0, u.b); C (v); v.b = f1 (2, 0, 0, u.b); C (v); v.b = f1 (3, 0, 0, 0, u.b); C (v); v.b = f1 (4, 0, 0, 0, 0, u.b); C (v); v.b = f1 (5, 0, 0, 0, 0, 0, u.b); C (v); v.b = f1 (6, 0, 0, 0, 0, 0, 0, u.b); C (v); v.b = f1 (7, 0, 0, 0, 0, 0, 0, 0, u.b); C (v); v.b = f1 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.b); C (v); v.b = f1 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.b); C (v); #endif v.c = f2 (0, u.c); C (v); v.c = f2 (1, 0, u.c); C (v); v.c = f2 (2, 0, 0, u.c); C (v); v.c = f2 (3, 0, 0, 0, u.c); C (v); v.c = f2 (4, 0, 0, 0, 0, u.c); C (v); v.c = f2 (5, 0, 0, 0, 0, 0, u.c); C (v); v.c = f2 (6, 0, 0, 0, 0, 0, 0, u.c); C (v); v.c = f2 (7, 0, 0, 0, 0, 0, 0, 0, u.c); C (v); v.c = f2 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.c); C (v); v.c = f2 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.c); C (v); v.d = f3 (0, u.d); C (v); v.d = f3 (1, 0, u.d); C (v); v.d = f3 (2, 0, 0, u.d); C (v); v.d = f3 (3, 0, 0, 0, u.d); C (v); v.d = f3 (4, 0, 0, 0, 0, u.d); C (v); v.d = f3 (5, 0, 0, 0, 0, 0, u.d); C (v); v.d = f3 (6, 0, 0, 0, 0, 0, 0, u.d); C (v); v.d = f3 (7, 0, 0, 0, 0, 0, 0, 0, u.d); C (v); v.d = f3 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.d); C (v); v.d = f3 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.d); C (v); #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ f4 (0, u.b); v.b = b; C (v); f4 (1, 0, u.b); v.b = b; C (v); f4 (2, 0, 0, u.b); v.b = b; C (v); f4 (3, 0, 0, 0, u.b); v.b = b; C (v); f4 (4, 0, 0, 0, 0, u.b); v.b = b; C (v); f4 (5, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); f4 (6, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); f4 (7, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); f4 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); f4 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); #endif f5 (0, u.c); v.c = c; C (v); f5 (1, 0, u.c); v.c = c; C (v); f5 (2, 0, 0, u.c); v.c = c; C (v); f5 (3, 0, 0, 0, u.c); v.c = c; C (v); f5 (4, 0, 0, 0, 0, u.c); v.c = c; C (v); f5 (5, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); f5 (6, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); f5 (7, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); f5 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); f5 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); f6 (0, u.d); v.d = d; C (v); f6 (1, 0, u.d); v.d = d; C (v); f6 (2, 0, 0, u.d); v.d = d; C (v); f6 (3, 0, 0, 0, u.d); v.d = d; C (v); f6 (4, 0, 0, 0, 0, u.d); v.d = d; C (v); f6 (5, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); f6 (6, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); f6 (7, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); f6 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); f6 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); u.e.a = 1.25; u.e.b = 2.75; u.e.c = -3.5; u.e.d = -2.0; #undef C #define C(x) \ do { \ if (u.e.a != x.e.a || u.e.b != x.e.b \ || u.e.c != x.e.c || u.e.d != x.e.d) __builtin_abort ();\ u.e.a++; \ u.e.b--; \ u.e.c++; \ u.e.d--; \ } while (0) v.e = f7 (0, u.e); C (v); v.e = f7 (1, 0.0, u.e); C (v); v.e = f7 (2, 0.0, 0.0, u.e); C (v); v.e = f7 (3, 0.0, 0.0, 0.0, u.e); C (v); v.e = f7 (4, 0.0, 0.0, 0.0, 0.0, u.e); C (v); v.e = f7 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); v.e = f7 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); v.e = f7 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); v.e = f7 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); v.e = f7 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); v.f = f8 (0, u.f); C (v); v.f = f8 (1, 0.0, u.f); C (v); v.f = f8 (2, 0.0, 0.0, u.f); C (v); v.f = f8 (3, 0.0, 0.0, 0.0, u.f); C (v); v.f = f8 (4, 0.0, 0.0, 0.0, 0.0, u.f); C (v); v.f = f8 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); v.f = f8 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); v.f = f8 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); v.f = f8 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); v.f = f8 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); f9 (0, u.e); v.e = e; C (v); f9 (1, 0.0, u.e); v.e = e; C (v); f9 (2, 0.0, 0.0, u.e); v.e = e; C (v); f9 (3, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f9 (4, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f9 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f9 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f9 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f9 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f9 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); f10 (0, u.f); v.f = f; C (v); f10 (1, 0.0, u.f); v.f = f; C (v); f10 (2, 0.0, 0.0, u.f); v.f = f; C (v); f10 (3, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); f10 (4, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); f10 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); f10 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); f10 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); f10 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); f10 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); u.g.a = 9.5; u.g.b = 0x5555555555555555ULL; #undef C #define C(x) \ do { \ if (u.e.a != x.e.a || u.e.b != x.e.b) __builtin_abort (); \ u.e.a++; \ u.e.b--; \ } while (0) v.g = f11 (0, u.g); C (v); v.g = f11 (1, 0, 0.0, u.g); C (v); v.g = f11 (2, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.g = f11 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); v.h = f12 (0, u.h); C (v); v.h = f12 (1, 0, 0.0, u.h); C (v); v.h = f12 (2, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); v.h = f12 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); f13 (0, u.g); v.g = g; C (v); f13 (1, 0, 0.0, u.g); v.g = g; C (v); f13 (2, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f13 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); f14 (0, u.h); v.h = h; C (v); f14 (1, 0, 0.0, u.h); v.h = h; C (v); f14 (2, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); f14 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); return 0; }