(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
compat/
struct-by-value-9_x.c
       1  #include "compat-common.h"
       2  
       3  #define T(N, TYPE)						\
       4  struct S##TYPE##N { TYPE i[N]; };				\
       5  								\
       6  struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N;			\
       7  struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N;			\
       8  struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N;			\
       9  struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N;			\
      10  struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N;			\
      11  struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N;			\
      12  struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N;			\
      13  struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N;			\
      14  								\
      15  extern void init##TYPE (TYPE *p, int i);			\
      16  extern void checkg##TYPE##N (void);				\
      17  extern void							\
      18  test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2,	\
      19  	       struct S##TYPE##N s3, struct S##TYPE##N s4,	\
      20  	       struct S##TYPE##N s5, struct S##TYPE##N s6,	\
      21  	       struct S##TYPE##N s7, struct S##TYPE##N s8,	\
      22  	       struct S##TYPE##N s9, struct S##TYPE##N s10,	\
      23  	       struct S##TYPE##N s11, struct S##TYPE##N s12,	\
      24  	       struct S##TYPE##N s13, struct S##TYPE##N s14,	\
      25  	       struct S##TYPE##N s15, struct S##TYPE##N s16);	\
      26  extern void testva##TYPE##N (int n, ...);			\
      27  								\
      28  								\
      29  void								\
      30  init##TYPE##N (struct S##TYPE##N *p, int i)			\
      31  {								\
      32    int j;							\
      33    for (j = 0; j < N; j++)					\
      34      init##TYPE(&p->i[j], i+j);					\
      35  }								\
      36  								\
      37  void								\
      38  check##TYPE##N (struct S##TYPE##N *p, int i)			\
      39  {								\
      40    int j;							\
      41    for (j = 0; j < N; j++)					\
      42      check##TYPE(p->i[j], i+j);					\
      43  }								\
      44  								\
      45  void								\
      46  test2_##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2,	\
      47  		 struct S##TYPE##N s3, struct S##TYPE##N s4,	\
      48  		 struct S##TYPE##N s5, struct S##TYPE##N s6,	\
      49  		 struct S##TYPE##N s7, struct S##TYPE##N s8)	\
      50  {								\
      51    test##TYPE##N (s1, g2s##TYPE##N, s2, g4s##TYPE##N,		\
      52  		 s3, g6s##TYPE##N, s4, g8s##TYPE##N,		\
      53  		 s5, g10s##TYPE##N, s6, g12s##TYPE##N,		\
      54  		 s7, g14s##TYPE##N, s8, g16s##TYPE##N);		\
      55  }								\
      56  								\
      57  void								\
      58  testit##TYPE##N (void)						\
      59  {								\
      60    DEBUG_FPUTS (#TYPE "[" #N "]");				\
      61    DEBUG_FPUTS (" init: ");					\
      62    init##TYPE##N  ( &g1s##TYPE##N,  1*16);			\
      63    init##TYPE##N  ( &g2s##TYPE##N,  2*16);			\
      64    init##TYPE##N  ( &g3s##TYPE##N,  3*16);			\
      65    init##TYPE##N  ( &g4s##TYPE##N,  4*16);			\
      66    init##TYPE##N  ( &g5s##TYPE##N,  5*16);			\
      67    init##TYPE##N  ( &g6s##TYPE##N,  6*16);			\
      68    init##TYPE##N  ( &g7s##TYPE##N,  7*16);			\
      69    init##TYPE##N  ( &g8s##TYPE##N,  8*16);			\
      70    init##TYPE##N  ( &g9s##TYPE##N,  9*16);			\
      71    init##TYPE##N  (&g10s##TYPE##N, 10*16);			\
      72    init##TYPE##N  (&g11s##TYPE##N, 11*16);			\
      73    init##TYPE##N  (&g12s##TYPE##N, 12*16);			\
      74    init##TYPE##N  (&g13s##TYPE##N, 13*16);			\
      75    init##TYPE##N  (&g14s##TYPE##N, 14*16);			\
      76    init##TYPE##N  (&g15s##TYPE##N, 15*16);			\
      77    init##TYPE##N  (&g16s##TYPE##N, 16*16);			\
      78    checkg##TYPE##N ();						\
      79    DEBUG_NL;							\
      80    DEBUG_FPUTS (#TYPE "[" #N "]");				\
      81    DEBUG_FPUTS (" test: ");					\
      82    test##TYPE##N (g1s##TYPE##N, g2s##TYPE##N,			\
      83  		 g3s##TYPE##N, g4s##TYPE##N,			\
      84  		 g5s##TYPE##N, g6s##TYPE##N,			\
      85  		 g7s##TYPE##N, g8s##TYPE##N,			\
      86  		 g9s##TYPE##N, g10s##TYPE##N,			\
      87  		 g11s##TYPE##N, g12s##TYPE##N,			\
      88  		 g13s##TYPE##N, g14s##TYPE##N,			\
      89  		 g15s##TYPE##N, g16s##TYPE##N);			\
      90    DEBUG_NL;							\
      91    DEBUG_FPUTS (#TYPE "[" #N "]");				\
      92    DEBUG_FPUTS (" testva:");					\
      93    DEBUG_NL;							\
      94    testva##TYPE##N (16,						\
      95  		   g1s##TYPE##N, g2s##TYPE##N,			\
      96  		   g3s##TYPE##N, g4s##TYPE##N,			\
      97  		   g5s##TYPE##N, g6s##TYPE##N,			\
      98  		   g7s##TYPE##N, g8s##TYPE##N,			\
      99  		   g9s##TYPE##N, g10s##TYPE##N,			\
     100  		   g11s##TYPE##N, g12s##TYPE##N,		\
     101  		   g13s##TYPE##N, g14s##TYPE##N,		\
     102  		   g15s##TYPE##N, g16s##TYPE##N);		\
     103    DEBUG_NL;							\
     104    DEBUG_FPUTS (#TYPE "[" #N "]");				\
     105    DEBUG_FPUTS (" test2: ");					\
     106    test2_##TYPE##N (g1s##TYPE##N, g3s##TYPE##N,			\
     107  		   g5s##TYPE##N, g7s##TYPE##N,			\
     108  		   g9s##TYPE##N, g11s##TYPE##N,			\
     109  		   g13s##TYPE##N, g15s##TYPE##N);		\
     110    DEBUG_NL;							\
     111  }
     112  
     113  typedef struct { char c; } Sc;
     114  typedef struct { short s; } Ss;
     115  typedef struct { int i; } Si;
     116  typedef struct { short s; char c; } Ssc;
     117  typedef struct { int i; short s; } Sis;
     118  typedef struct { char c; short s; int i; } Scsi;
     119  typedef struct { char c; int i; short s; } Scis;
     120  
     121  extern void abort (void);
     122  
     123  void checkSc (Sc x, int i) { if (x.c != i/16) DEBUG_CHECK }
     124  void checkSs (Ss x, int i) { if (x.s != i) DEBUG_CHECK }
     125  void checkSi (Si x, int i) { if (x.i != i) DEBUG_CHECK }
     126  void checkSsc (Ssc x, int i)
     127  { if (x.s != i || x.c != (i/16)+1) DEBUG_CHECK }
     128  void checkSis (Sis x, int i)
     129  { if (x.i != i || x.s != i+1) DEBUG_CHECK }
     130  void checkScsi (Scsi x, int i)
     131  { if (x.c != i/16 || x.s != i+1 || x.i != i+2) DEBUG_CHECK }
     132  void checkScis (Scis x, int i)
     133  { if (x.c != i/16 || x.i != i+1 || x.s != i+2) DEBUG_CHECK }
     134  
     135  #ifndef SKIP_ZERO_ARRAY
     136  T(0, Scsi)
     137  #endif
     138  T(1, Scsi)
     139  T(2, Scsi)
     140  T(3, Scsi)
     141  T(4, Scsi)
     142  T(5, Scsi)
     143  T(6, Scsi)
     144  T(7, Scsi)
     145  T(8, Scsi)
     146  T(9, Scsi)
     147  T(10, Scsi)
     148  T(11, Scsi)
     149  T(12, Scsi)
     150  T(13, Scsi)
     151  T(14, Scsi)
     152  T(15, Scsi)
     153  #ifndef SKIP_ZERO_ARRAY
     154  T(0, Scis)
     155  #endif
     156  T(1, Scis)
     157  T(2, Scis)
     158  T(3, Scis)
     159  T(4, Scis)
     160  T(5, Scis)
     161  T(6, Scis)
     162  T(7, Scis)
     163  T(8, Scis)
     164  T(9, Scis)
     165  T(10, Scis)
     166  T(11, Scis)
     167  T(12, Scis)
     168  T(13, Scis)
     169  T(14, Scis)
     170  T(15, Scis)
     171  
     172  #undef T
     173  
     174  void
     175  struct_by_value_9_x ()
     176  {
     177  DEBUG_INIT
     178  
     179  #define T(N, TYPE) testit##TYPE##N ();
     180  
     181  #ifndef SKIP_ZERO_ARRAY
     182  T(0, Scsi)
     183  #endif
     184  T(1, Scsi)
     185  T(2, Scsi)
     186  T(3, Scsi)
     187  T(4, Scsi)
     188  T(5, Scsi)
     189  T(6, Scsi)
     190  T(7, Scsi)
     191  T(8, Scsi)
     192  T(9, Scsi)
     193  T(10, Scsi)
     194  T(11, Scsi)
     195  T(12, Scsi)
     196  T(13, Scsi)
     197  T(14, Scsi)
     198  T(15, Scsi)
     199  #ifndef SKIP_ZERO_ARRAY
     200  T(0, Scis)
     201  #endif
     202  T(1, Scis)
     203  T(2, Scis)
     204  T(3, Scis)
     205  T(4, Scis)
     206  T(5, Scis)
     207  T(6, Scis)
     208  T(7, Scis)
     209  T(8, Scis)
     210  T(9, Scis)
     211  T(10, Scis)
     212  T(11, Scis)
     213  T(12, Scis)
     214  T(13, Scis)
     215  T(14, Scis)
     216  T(15, Scis)
     217  
     218  DEBUG_FINI
     219  
     220  if (fails != 0)
     221    abort ();
     222  
     223  #undef T
     224  }