view gcc/testsuite/gcc.c-torture/execute/pr92904.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
line wrap: on
line source

/* PR target/92904 */

#include <stdarg.h>

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;
}