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