modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/mode-dependent-address.c (about)

     1  /* { dg-require-effective-target stdint_types } */
     2  
     3  #include <stdint.h>
     4  #include <string.h>
     5  #include <stdlib.h>
     6  
     7  void f883b (int8_t * result,
     8      int16_t * __restrict arg1,
     9      uint32_t * __restrict arg2,
    10      uint64_t * __restrict arg3,
    11      uint8_t * __restrict arg4)
    12  {
    13      int idx;
    14      for (idx=0;idx<96;idx += 1) {
    15  	result[idx] = (((((((((((-27 + 2+1)>>1) || arg4[idx]) < arg1[idx])
    16  				? (((-27 + 2+1)>>1) || arg4[idx])
    17  				: arg1[idx])
    18  			       >> (arg2[idx] & 31)) ^ 1) - -32)>>7) | -5) & arg3[idx]);
    19      }
    20  }
    21  
    22  int8_t result[96];
    23  int16_t arg1[96];
    24  uint32_t arg2[96];
    25  uint64_t arg3[96];
    26  uint8_t arg4[96];
    27  
    28  int main (void) 
    29  {
    30    int i;
    31    int correct[] = {0x0,0x1,0x2,0x3,0x0,0x1,0x2,0x3,0x8,0x9,0xa,0xb,0x8,0x9,
    32                     0xa,0xb,0x10,0x11,0x12,0x13,0x10,0x11,0x12,0x13,
    33                     0x18,0x19,0x1a,0x1b,0x18,0x19,0x1a,0x1b,0x20,0x21,0x22,
    34                     0x23,0x20,0x21,0x22,0x23,0x28,0x29,0x2a,
    35                     0x2b,0x28,0x29,0x2a,0x2b,0x30,0x31,0x32,0x33,
    36                     0x30,0x31,0x32,0x33,0x38,0x39,0x3a,0x3b,0x38,0x39,0x3a,
    37                     0x3b,0x40,0x41,0x42,0x43,0x40,0x41,0x42,0x43,0x48,0x49,
    38                     0x4a,0x4b,0x48,0x49,0x4a,0x4b,0x50,0x51,
    39                     0x52,0x53,0x50,0x51,0x52,0x53,0x58,0x59,0x5a,0x5b,
    40                     0x58,0x59,0x5a,0x5b};
    41  
    42    for (i=0; i < 96; i++)
    43      arg3[i] = arg2[i] = arg1[i] = arg4[i] = i;
    44  
    45    f883b(result, arg1, arg2, arg3, arg4);
    46  
    47    for (i=0; i < 96; i++)
    48      if (result[i] != correct[i]) abort();
    49  
    50    return 0;
    51  }