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

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

#define SETUP(NAME,V1,V2,V3)				\
char v1_##NAME = V1;					\
double v2_##NAME = V2;					\
int v3_##NAME = V3;					\
							\
struct B1_##NAME b1_##NAME = { V1, V2 };		\
struct B2_##NAME b2_##NAME = { V1, { V2 } };		\
struct B3_##NAME b3_##NAME = { V1, { V2, V3 } };	\
							\
struct B1_##NAME ab1_##NAME[2] =			\
  { { V1, V2 }, { V1, V2 } };				\
struct B2_##NAME ab2_##NAME[2] =			\
  { { V1, { V2 } }, { V1, { V2 } } };			\
struct B3_##NAME ab3_##NAME[2] =			\
  { { V1, { V2, V3 } }, { V1, { V2, V3 } } };		\
							\
extern void test_##NAME (void);				\
extern void checkp1_##NAME (struct B1_##NAME *);	\
extern void checkp2_##NAME (struct B2_##NAME *);	\
extern void checkp3_##NAME (struct B3_##NAME *);	\
extern void checkg1_##NAME (void);			\
extern void checkg2_##NAME (void);			\
extern void checkg3_##NAME (void);			\
							\
void							\
pass1_##NAME (struct B1_##NAME s)			\
{							\
  checkp1_##NAME (&s);					\
}							\
							\
void							\
pass2_##NAME (struct B2_##NAME s)			\
{							\
  checkp2_##NAME (&s);					\
}							\
							\
void							\
pass3_##NAME (struct B3_##NAME s)			\
{							\
  checkp3_##NAME (&s);					\
}							\
							\
struct B1_##NAME					\
return1_##NAME (void)					\
{							\
  return ab1_##NAME[0];					\
}							\
							\
struct B2_##NAME					\
return2_##NAME (void)					\
{							\
  return ab2_##NAME[0];					\
}							\
							\
struct B3_##NAME					\
return3_##NAME (void)					\
{							\
  return ab3_##NAME[0];					\
}

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

#if __INT_MAX__ > 32767
SETUP (orig, 49, 1.0, 111111)
#else
SETUP (orig, 49, 1.0, 1111)
#endif
#ifndef SKIP_ATTRIBUTE
#if __INT_MAX__ > 32767
SETUP (p_all, 50, 2.0, 222222)
SETUP (p_inner, 51, 3.0, 333333)
SETUP (p_outer, 52, 4.0, 444444)
SETUP (a_max, 53, 5.0, 555555)
SETUP (m_outer_p_inner, 54, 6.0, 666666)
SETUP (m_inner_p_outer, 55, 7.0, 777777)
#else
SETUP (p_all, 50, 2.0, 2222)
SETUP (p_inner, 51, 3.0, 3333)
SETUP (p_outer, 52, 4.0, 4444)
SETUP (a_max, 53, 5.0, 5555)
SETUP (m_outer_p_inner, 54, 6.0, 6666)
SETUP (m_inner_p_outer, 55, 7.0, 7777)
#endif
#endif

void
struct_align_1_x (void)
{
  DEBUG_INIT

  CHECK (orig);
#ifndef SKIP_ATTRIBUTE
  CHECK (p_all);
  CHECK (p_inner);
  CHECK (p_outer);
  CHECK (a_max);
  CHECK (m_outer_p_inner);
  CHECK (m_inner_p_outer);
#endif

  DEBUG_FINI

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