(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
pr92904.c
       1  /* PR target/92904 */
       2  
       3  #include <stdarg.h>
       4  
       5  struct S { long long a, b; };
       6  struct __attribute__((aligned (16))) T { long long a, b; };
       7  struct U { double a, b, c, d; };
       8  struct __attribute__((aligned (32))) V { double a, b, c, d; };
       9  struct W { double a; long long b; };
      10  struct __attribute__((aligned (16))) X { double a; long long b; };
      11  #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__
      12  __int128 b;
      13  #endif
      14  struct S c;
      15  struct T d;
      16  struct U e;
      17  struct V f;
      18  struct W g;
      19  struct X h;
      20  
      21  #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__
      22  __attribute__((noipa)) __int128
      23  f1 (int x, ...)
      24  {
      25    __int128 r;
      26    va_list ap;
      27    va_start (ap, x);
      28    while (x--)
      29      va_arg (ap, int);
      30    r = va_arg (ap, __int128);
      31    va_end (ap);
      32    return r;
      33  }
      34  #endif
      35  
      36  __attribute__((noipa)) struct S
      37  f2 (int x, ...)
      38  {
      39    struct S r;
      40    va_list ap;
      41    va_start (ap, x);
      42    while (x--)
      43      va_arg (ap, int);
      44    r = va_arg (ap, struct S);
      45    va_end (ap);
      46    return r;
      47  }
      48  
      49  __attribute__((noipa)) struct T
      50  f3 (int x, ...)
      51  {
      52    struct T r;
      53    va_list ap;
      54    va_start (ap, x);
      55    while (x--)
      56      va_arg (ap, int);
      57    r = va_arg (ap, struct T);
      58    va_end (ap);
      59    return r;
      60  }
      61  
      62  #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__
      63  __attribute__((noipa)) void
      64  f4 (int x, ...)
      65  {
      66    va_list ap;
      67    va_start (ap, x);
      68    while (x--)
      69      va_arg (ap, int);
      70    b = va_arg (ap, __int128);
      71    va_end (ap);
      72  }
      73  #endif
      74  
      75  __attribute__((noipa)) void
      76  f5 (int x, ...)
      77  {
      78    va_list ap;
      79    va_start (ap, x);
      80    while (x--)
      81      va_arg (ap, int);
      82    c = va_arg (ap, struct S);
      83    va_end (ap);
      84  }
      85  
      86  __attribute__((noipa)) void
      87  f6 (int x, ...)
      88  {
      89    va_list ap;
      90    va_start (ap, x);
      91    while (x--)
      92      va_arg (ap, int);
      93    d = va_arg (ap, struct T);
      94    va_end (ap);
      95  }
      96  
      97  __attribute__((noipa)) struct U
      98  f7 (int x, ...)
      99  {
     100    struct U r;
     101    va_list ap;
     102    va_start (ap, x);
     103    while (x--)
     104      va_arg (ap, double);
     105    r = va_arg (ap, struct U);
     106    va_end (ap);
     107    return r;
     108  }
     109  
     110  __attribute__((noipa)) struct V
     111  f8 (int x, ...)
     112  {
     113    struct V r;
     114    va_list ap;
     115    va_start (ap, x);
     116    while (x--)
     117      va_arg (ap, double);
     118    r = va_arg (ap, struct V);
     119    va_end (ap);
     120    return r;
     121  }
     122  
     123  __attribute__((noipa)) void
     124  f9 (int x, ...)
     125  {
     126    va_list ap;
     127    va_start (ap, x);
     128    while (x--)
     129      va_arg (ap, double);
     130    e = va_arg (ap, struct U);
     131    va_end (ap);
     132  }
     133  
     134  __attribute__((noipa)) void
     135  f10 (int x, ...)
     136  {
     137    va_list ap;
     138    va_start (ap, x);
     139    while (x--)
     140      va_arg (ap, double);
     141    f = va_arg (ap, struct V);
     142    va_end (ap);
     143  }
     144  
     145  __attribute__((noipa)) struct W
     146  f11 (int x, ...)
     147  {
     148    struct W r;
     149    va_list ap;
     150    va_start (ap, x);
     151    while (x--)
     152      {
     153        va_arg (ap, int);
     154        va_arg (ap, double);
     155      }
     156    r = va_arg (ap, struct W);
     157    va_end (ap);
     158    return r;
     159  }
     160  
     161  __attribute__((noipa)) struct X
     162  f12 (int x, ...)
     163  {
     164    struct X r;
     165    va_list ap;
     166    va_start (ap, x);
     167    while (x--)
     168      {
     169        va_arg (ap, int);
     170        va_arg (ap, double);
     171      }
     172    r = va_arg (ap, struct X);
     173    va_end (ap);
     174    return r;
     175  }
     176  
     177  __attribute__((noipa)) void
     178  f13 (int x, ...)
     179  {
     180    va_list ap;
     181    va_start (ap, x);
     182    while (x--)
     183      {
     184        va_arg (ap, int);
     185        va_arg (ap, double);
     186      }
     187    g = va_arg (ap, struct W);
     188    va_end (ap);
     189  }
     190  
     191  __attribute__((noipa)) void
     192  f14 (int x, ...)
     193  {
     194    va_list ap;
     195    va_start (ap, x);
     196    while (x--)
     197      {
     198        va_arg (ap, int);
     199        va_arg (ap, double);
     200      }
     201    h = va_arg (ap, struct X);
     202    va_end (ap);
     203  }
     204  
     205  int
     206  main ()
     207  {
     208    union Y {
     209  #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__
     210      __int128 b;
     211  #endif
     212      struct S c;
     213      struct T d;
     214      struct U e;
     215      struct V f;
     216      struct W g;
     217      struct X h;
     218    } u, v;
     219    u.c.a = 0x5555555555555555ULL;
     220    u.c.b = 0xaaaaaaaaaaaaaaaaULL;
     221  #define C(x) \
     222    do {								\
     223      if (u.c.a != x.c.a || u.c.b != x.c.b) __builtin_abort ();	\
     224      u.c.a++;							\
     225      u.c.b--;							\
     226    } while (0)
     227  #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__
     228    v.b = f1 (0, u.b); C (v);
     229    v.b = f1 (1, 0, u.b); C (v);
     230    v.b = f1 (2, 0, 0, u.b); C (v);
     231    v.b = f1 (3, 0, 0, 0, u.b); C (v);
     232    v.b = f1 (4, 0, 0, 0, 0, u.b); C (v);
     233    v.b = f1 (5, 0, 0, 0, 0, 0, u.b); C (v);
     234    v.b = f1 (6, 0, 0, 0, 0, 0, 0, u.b); C (v);
     235    v.b = f1 (7, 0, 0, 0, 0, 0, 0, 0, u.b); C (v);
     236    v.b = f1 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.b); C (v);
     237    v.b = f1 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.b); C (v);
     238  #endif
     239    v.c = f2 (0, u.c); C (v);
     240    v.c = f2 (1, 0, u.c); C (v);
     241    v.c = f2 (2, 0, 0, u.c); C (v);
     242    v.c = f2 (3, 0, 0, 0, u.c); C (v);
     243    v.c = f2 (4, 0, 0, 0, 0, u.c); C (v);
     244    v.c = f2 (5, 0, 0, 0, 0, 0, u.c); C (v);
     245    v.c = f2 (6, 0, 0, 0, 0, 0, 0, u.c); C (v);
     246    v.c = f2 (7, 0, 0, 0, 0, 0, 0, 0, u.c); C (v);
     247    v.c = f2 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.c); C (v);
     248    v.c = f2 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.c); C (v);
     249    v.d = f3 (0, u.d); C (v);
     250    v.d = f3 (1, 0, u.d); C (v);
     251    v.d = f3 (2, 0, 0, u.d); C (v);
     252    v.d = f3 (3, 0, 0, 0, u.d); C (v);
     253    v.d = f3 (4, 0, 0, 0, 0, u.d); C (v);
     254    v.d = f3 (5, 0, 0, 0, 0, 0, u.d); C (v);
     255    v.d = f3 (6, 0, 0, 0, 0, 0, 0, u.d); C (v);
     256    v.d = f3 (7, 0, 0, 0, 0, 0, 0, 0, u.d); C (v);
     257    v.d = f3 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.d); C (v);
     258    v.d = f3 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.d); C (v);
     259  #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__
     260    f4 (0, u.b); v.b = b; C (v);
     261    f4 (1, 0, u.b); v.b = b; C (v);
     262    f4 (2, 0, 0, u.b); v.b = b; C (v);
     263    f4 (3, 0, 0, 0, u.b); v.b = b; C (v);
     264    f4 (4, 0, 0, 0, 0, u.b); v.b = b; C (v);
     265    f4 (5, 0, 0, 0, 0, 0, u.b); v.b = b; C (v);
     266    f4 (6, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v);
     267    f4 (7, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v);
     268    f4 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v);
     269    f4 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v);
     270  #endif
     271    f5 (0, u.c); v.c = c; C (v);
     272    f5 (1, 0, u.c); v.c = c; C (v);
     273    f5 (2, 0, 0, u.c); v.c = c; C (v);
     274    f5 (3, 0, 0, 0, u.c); v.c = c; C (v);
     275    f5 (4, 0, 0, 0, 0, u.c); v.c = c; C (v);
     276    f5 (5, 0, 0, 0, 0, 0, u.c); v.c = c; C (v);
     277    f5 (6, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v);
     278    f5 (7, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v);
     279    f5 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v);
     280    f5 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v);
     281    f6 (0, u.d); v.d = d; C (v);
     282    f6 (1, 0, u.d); v.d = d; C (v);
     283    f6 (2, 0, 0, u.d); v.d = d; C (v);
     284    f6 (3, 0, 0, 0, u.d); v.d = d; C (v);
     285    f6 (4, 0, 0, 0, 0, u.d); v.d = d; C (v);
     286    f6 (5, 0, 0, 0, 0, 0, u.d); v.d = d; C (v);
     287    f6 (6, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v);
     288    f6 (7, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v);
     289    f6 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v);
     290    f6 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v);
     291    u.e.a = 1.25;
     292    u.e.b = 2.75;
     293    u.e.c = -3.5;
     294    u.e.d = -2.0;
     295  #undef C
     296  #define C(x) \
     297    do {								\
     298      if (u.e.a != x.e.a || u.e.b != x.e.b			\
     299  	|| u.e.c != x.e.c || u.e.d != x.e.d) __builtin_abort ();\
     300      u.e.a++;							\
     301      u.e.b--;							\
     302      u.e.c++;							\
     303      u.e.d--;							\
     304    } while (0)
     305    v.e = f7 (0, u.e); C (v);
     306    v.e = f7 (1, 0.0, u.e); C (v);
     307    v.e = f7 (2, 0.0, 0.0, u.e); C (v);
     308    v.e = f7 (3, 0.0, 0.0, 0.0, u.e); C (v);
     309    v.e = f7 (4, 0.0, 0.0, 0.0, 0.0, u.e); C (v);
     310    v.e = f7 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v);
     311    v.e = f7 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v);
     312    v.e = f7 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v);
     313    v.e = f7 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v);
     314    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);
     315    v.f = f8 (0, u.f); C (v);
     316    v.f = f8 (1, 0.0, u.f); C (v);
     317    v.f = f8 (2, 0.0, 0.0, u.f); C (v);
     318    v.f = f8 (3, 0.0, 0.0, 0.0, u.f); C (v);
     319    v.f = f8 (4, 0.0, 0.0, 0.0, 0.0, u.f); C (v);
     320    v.f = f8 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v);
     321    v.f = f8 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v);
     322    v.f = f8 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v);
     323    v.f = f8 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v);
     324    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);
     325    f9 (0, u.e); v.e = e; C (v);
     326    f9 (1, 0.0, u.e); v.e = e; C (v);
     327    f9 (2, 0.0, 0.0, u.e); v.e = e; C (v);
     328    f9 (3, 0.0, 0.0, 0.0, u.e); v.e = e; C (v);
     329    f9 (4, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v);
     330    f9 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v);
     331    f9 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v);
     332    f9 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v);
     333    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);
     334    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);
     335    f10 (0, u.f); v.f = f; C (v);
     336    f10 (1, 0.0, u.f); v.f = f; C (v);
     337    f10 (2, 0.0, 0.0, u.f); v.f = f; C (v);
     338    f10 (3, 0.0, 0.0, 0.0, u.f); v.f = f; C (v);
     339    f10 (4, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v);
     340    f10 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v);
     341    f10 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v);
     342    f10 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v);
     343    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);
     344    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);
     345    u.g.a = 9.5;
     346    u.g.b = 0x5555555555555555ULL;
     347  #undef C
     348  #define C(x) \
     349    do {								\
     350      if (u.e.a != x.e.a || u.e.b != x.e.b) __builtin_abort ();	\
     351      u.e.a++;							\
     352      u.e.b--;							\
     353    } while (0)
     354    v.g = f11 (0, u.g); C (v);
     355    v.g = f11 (1, 0, 0.0, u.g); C (v);
     356    v.g = f11 (2, 0, 0.0, 0, 0.0, u.g); C (v);
     357    v.g = f11 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v);
     358    v.g = f11 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v);
     359    v.g = f11 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v);
     360    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);
     361    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);
     362    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);
     363    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);
     364    v.h = f12 (0, u.h); C (v);
     365    v.h = f12 (1, 0, 0.0, u.h); C (v);
     366    v.h = f12 (2, 0, 0.0, 0, 0.0, u.h); C (v);
     367    v.h = f12 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v);
     368    v.h = f12 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v);
     369    v.h = f12 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v);
     370    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);
     371    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);
     372    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);
     373    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);
     374    f13 (0, u.g); v.g = g; C (v);
     375    f13 (1, 0, 0.0, u.g); v.g = g; C (v);
     376    f13 (2, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v);
     377    f13 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v);
     378    f13 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v);
     379    f13 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v);
     380    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);
     381    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);
     382    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);
     383    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);
     384    f14 (0, u.h); v.h = h; C (v);
     385    f14 (1, 0, 0.0, u.h); v.h = h; C (v);
     386    f14 (2, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v);
     387    f14 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v);
     388    f14 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v);
     389    f14 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v);
     390    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);
     391    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);
     392    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);
     393    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);
     394    return 0;
     395  }