(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
compat/
struct-align-1_x.c
       1  /* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
       2  
       3  #include "compat-common.h"
       4  #include "struct-align-1.h"
       5  
       6  #define SETUP(NAME,V1,V2,V3)				\
       7  char v1_##NAME = V1;					\
       8  double v2_##NAME = V2;					\
       9  int v3_##NAME = V3;					\
      10  							\
      11  struct B1_##NAME b1_##NAME = { V1, V2 };		\
      12  struct B2_##NAME b2_##NAME = { V1, { V2 } };		\
      13  struct B3_##NAME b3_##NAME = { V1, { V2, V3 } };	\
      14  							\
      15  struct B1_##NAME ab1_##NAME[2] =			\
      16    { { V1, V2 }, { V1, V2 } };				\
      17  struct B2_##NAME ab2_##NAME[2] =			\
      18    { { V1, { V2 } }, { V1, { V2 } } };			\
      19  struct B3_##NAME ab3_##NAME[2] =			\
      20    { { V1, { V2, V3 } }, { V1, { V2, V3 } } };		\
      21  							\
      22  extern void test_##NAME (void);				\
      23  extern void checkp1_##NAME (struct B1_##NAME *);	\
      24  extern void checkp2_##NAME (struct B2_##NAME *);	\
      25  extern void checkp3_##NAME (struct B3_##NAME *);	\
      26  extern void checkg1_##NAME (void);			\
      27  extern void checkg2_##NAME (void);			\
      28  extern void checkg3_##NAME (void);			\
      29  							\
      30  void							\
      31  pass1_##NAME (struct B1_##NAME s)			\
      32  {							\
      33    checkp1_##NAME (&s);					\
      34  }							\
      35  							\
      36  void							\
      37  pass2_##NAME (struct B2_##NAME s)			\
      38  {							\
      39    checkp2_##NAME (&s);					\
      40  }							\
      41  							\
      42  void							\
      43  pass3_##NAME (struct B3_##NAME s)			\
      44  {							\
      45    checkp3_##NAME (&s);					\
      46  }							\
      47  							\
      48  struct B1_##NAME					\
      49  return1_##NAME (void)					\
      50  {							\
      51    return ab1_##NAME[0];					\
      52  }							\
      53  							\
      54  struct B2_##NAME					\
      55  return2_##NAME (void)					\
      56  {							\
      57    return ab2_##NAME[0];					\
      58  }							\
      59  							\
      60  struct B3_##NAME					\
      61  return3_##NAME (void)					\
      62  {							\
      63    return ab3_##NAME[0];					\
      64  }
      65  
      66  #define CHECK(NAME) test_##NAME()
      67  
      68  #if __INT_MAX__ > 32767
      69  SETUP (orig, 49, 1.0, 111111)
      70  #else
      71  SETUP (orig, 49, 1.0, 1111)
      72  #endif
      73  #ifndef SKIP_ATTRIBUTE
      74  #if __INT_MAX__ > 32767
      75  SETUP (p_all, 50, 2.0, 222222)
      76  SETUP (p_inner, 51, 3.0, 333333)
      77  SETUP (p_outer, 52, 4.0, 444444)
      78  SETUP (a_max, 53, 5.0, 555555)
      79  SETUP (m_outer_p_inner, 54, 6.0, 666666)
      80  SETUP (m_inner_p_outer, 55, 7.0, 777777)
      81  #else
      82  SETUP (p_all, 50, 2.0, 2222)
      83  SETUP (p_inner, 51, 3.0, 3333)
      84  SETUP (p_outer, 52, 4.0, 4444)
      85  SETUP (a_max, 53, 5.0, 5555)
      86  SETUP (m_outer_p_inner, 54, 6.0, 6666)
      87  SETUP (m_inner_p_outer, 55, 7.0, 7777)
      88  #endif
      89  #endif
      90  
      91  void
      92  struct_align_1_x (void)
      93  {
      94    DEBUG_INIT
      95  
      96    CHECK (orig);
      97  #ifndef SKIP_ATTRIBUTE
      98    CHECK (p_all);
      99    CHECK (p_inner);
     100    CHECK (p_outer);
     101    CHECK (a_max);
     102    CHECK (m_outer_p_inner);
     103    CHECK (m_inner_p_outer);
     104  #endif
     105  
     106    DEBUG_FINI
     107  
     108    if (fails != 0)
     109      abort ();
     110  }