/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */

/* Disable this test for 16-bit targets.  */

#include <limits.h>

#if !(defined __GNUC__) || (INT_MAX > 32767)

#include "compat-common.h"
#include "struct-align-2.h"

#define SETUP(NAME,V1,V2,V3)					\
struct outer_##NAME {						\
  int i;							\
  struct epoll_event_##NAME ee;					\
};								\
								\
unsigned int v1_##NAME = V1;					\
unsigned int v2_##NAME = V2;					\
unsigned long long v3_##NAME = V3;				\
								\
struct outer_##NAME s_##NAME[2] =				\
 { {V1, { V2, V3 } }, { V1, { V2, V3 } } };			\
								\
extern void test_##NAME (void);					\
extern void checkp_##NAME (struct outer_##NAME *);		\
extern void checkg_##NAME (void);				\
								\
void								\
pass_##NAME (struct outer_##NAME s)				\
{								\
  checkp_##NAME (&s);						\
}								\
								\
struct outer_##NAME						\
return_##NAME (void)						\
{								\
  return s_##NAME[0];						\
}

#define CHECK(NAME)						\
  test_##NAME()

SETUP (orig,101, 102, 0x0101010101010101ULL)
#ifndef SKIP_ATTRIBUTE
SETUP (structmax, 103, 104, 0x1212121212121212ULL)
SETUP (struct4, 105, 106, 0x2323232323232323ULL)
SETUP (struct8, 107, 108, 0x3434343434343434ULL)
SETUP (data4, 109, 110, 0x4545454545454545ULL)
SETUP (data8, 111, 112, 0x5656565656565656ULL)
SETUP (p, 113, 114, 0x6767676767676767ULL)
SETUP (pstruct4, 115, 116, 0x7878787878787878ULL)
SETUP (pstruct8, 117, 118, 0x8989898989898989ULL)
SETUP (pdata4, 119, 120, 0x9A9A9A9A9A9A9A9AULL)
SETUP (pdata8, 121, 122, 0xABABABABABABABABULL)
#endif

void
struct_align_2_x (void)
{
  DEBUG_INIT

  CHECK (orig);
#ifndef SKIP_ATTRIBUTE
  CHECK (structmax);
  CHECK (struct4);
  CHECK (struct8);
  CHECK (data4);
  CHECK (data8);
  CHECK (p);
  CHECK (pstruct4);
  CHECK (pstruct8);
  CHECK (pdata4);
  CHECK (pdata8);
#endif

  DEBUG_FINI

  if (fails != 0)
    abort ();
}

#else

void struct_align_2_x (void) {}

#endif  /* INT_MAX */
