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

     1  /* { dg-require-effective-target int32plus } */
     2  
     3  /* Test arithmetics on bitfields.  */
     4  #ifndef T
     5  
     6  extern void abort (void);
     7  extern void exit (int);
     8  
     9  #ifndef FIELDS1
    10  #define FIELDS1
    11  #endif
    12  #ifndef FIELDS2
    13  #define FIELDS2
    14  #endif
    15  
    16  struct { FIELDS1 unsigned int i : 6, j : 11, k : 15; FIELDS2 } b;
    17  struct { FIELDS1 unsigned int i : 5, j : 1, k : 26; FIELDS2 } c;
    18  struct { FIELDS1 unsigned int i : 16, j : 8, k : 8; FIELDS2 } d;
    19  
    20  unsigned int ret1 (void) { return b.i; }
    21  unsigned int ret2 (void) { return b.j; }
    22  unsigned int ret3 (void) { return b.k; }
    23  unsigned int ret4 (void) { return c.i; }
    24  unsigned int ret5 (void) { return c.j; }
    25  unsigned int ret6 (void) { return c.k; }
    26  unsigned int ret7 (void) { return d.i; }
    27  unsigned int ret8 (void) { return d.j; }
    28  unsigned int ret9 (void) { return d.k; }
    29  
    30  #define T(n, pre, post, op) 					\
    31  void fn1_##n (unsigned int x) { pre b.i post; }			\
    32  void fn2_##n (unsigned int x) { pre b.j post; }			\
    33  void fn3_##n (unsigned int x) { pre b.k post; }			\
    34  void fn4_##n (unsigned int x) { pre c.i post; }			\
    35  void fn5_##n (unsigned int x) { pre c.j post; }			\
    36  void fn6_##n (unsigned int x) { pre c.k post; }			\
    37  void fn7_##n (unsigned int x) { pre d.i post; }			\
    38  void fn8_##n (unsigned int x) { pre d.j post; }			\
    39  void fn9_##n (unsigned int x) { pre d.k post; }
    40  
    41  #include "20040629-1.c"
    42  #undef T
    43  
    44  #define FAIL(n, i) abort ()
    45  
    46  int
    47  main (void)
    48  {
    49  #define T(n, pre, post, op)					\
    50    b.i = 51;							\
    51    b.j = 636;							\
    52    b.k = 31278;							\
    53    c.i = 21;							\
    54    c.j = 1;							\
    55    c.k = 33554432;						\
    56    d.i = 26812;							\
    57    d.j = 156;							\
    58    d.k = 187;							\
    59    fn1_##n (3);							\
    60    if (ret1 () != (op (51, 3) & ((1 << 6) - 1)))			\
    61      FAIL (n, 1);						\
    62    b.i = 51;							\
    63    fn2_##n (251);						\
    64    if (ret2 () != (op (636, 251) & ((1 << 11) - 1)))		\
    65      FAIL (n, 2);						\
    66    b.j = 636;							\
    67    fn3_##n (13279);						\
    68    if (ret3 () != (op (31278, 13279) & ((1 << 15) - 1)))		\
    69      FAIL (n, 3);						\
    70    b.j = 31278;							\
    71    fn4_##n (24);							\
    72    if (ret4 () != (op (21, 24) & ((1 << 5) - 1)))		\
    73      FAIL (n, 4);						\
    74    c.i = 21;							\
    75    fn5_##n (1);							\
    76    if (ret5 () != (op (1, 1) & ((1 << 1) - 1)))			\
    77      FAIL (n, 5);						\
    78    c.j = 1;							\
    79    fn6_##n (264151);						\
    80    if (ret6 () != (op (33554432, 264151) & ((1 << 26) - 1)))	\
    81      FAIL (n, 6);						\
    82    c.k = 33554432;						\
    83    fn7_##n (713);						\
    84    if (ret7 () != (op (26812, 713) & ((1 << 16) - 1)))		\
    85      FAIL (n, 7);						\
    86    d.i = 26812;							\
    87    fn8_##n (17);							\
    88    if (ret8 () != (op (156, 17) & ((1 << 8) - 1)))		\
    89      FAIL (n, 8);						\
    90    d.j = 156;							\
    91    fn9_##n (199);						\
    92    if (ret9 () != (op (187, 199) & ((1 << 8) - 1)))		\
    93      FAIL (n, 9);						\
    94    d.k = 187;
    95  
    96  #include "20040629-1.c"
    97  #undef T
    98    return 0;
    99  }
   100  
   101  #else
   102  
   103  #ifndef opadd
   104  #define opadd(x, y) (x + y)
   105  #define opsub(x, y) (x - y)
   106  #define opinc(x, y) (x + 1)
   107  #define opdec(x, y) (x - 1)
   108  #define opand(x, y) (x & y)
   109  #define opior(x, y) (x | y)
   110  #define opxor(x, y) (x ^ y)
   111  #define opdiv(x, y) (x / y)
   112  #define oprem(x, y) (x % y)
   113  #define opadd3(x, y) (x + 3)
   114  #define opsub7(x, y) (x - 7)
   115  #define opand21(x, y) (x & 21)
   116  #define opior19(x, y) (x | 19)
   117  #define opxor37(x, y) (x ^ 37)
   118  #define opdiv17(x, y) (x / 17)
   119  #define oprem19(x, y) (x % 19)
   120  #endif
   121  
   122  T(1, , += x, opadd)
   123  T(2, ++, , opinc)
   124  T(3, , ++, opinc)
   125  T(4, , -= x, opsub)
   126  T(5, --, , opdec)
   127  T(6, , --, opdec)
   128  T(7, , &= x, opand)
   129  T(8, , |= x, opior)
   130  T(9, , ^= x, opxor)
   131  T(a, , /= x, opdiv)
   132  T(b, , %= x, oprem)
   133  T(c, , += 3, opadd3)
   134  T(d, , -= 7, opsub7)
   135  T(e, , &= 21, opand21)
   136  T(f, , |= 19, opior19)
   137  T(g, , ^= 37, opxor37)
   138  T(h, , /= 17, opdiv17)
   139  T(i, , %= 19, oprem19)
   140  
   141  #endif