Fix gimplification of ordering comparisons of arrays of bytes
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / bitint-2.c
blob931774565468ab778fb699548c993428c4407282
1 /* PR c/102989 */
2 /* { dg-do run { target bitint } } */
3 /* { dg-options "-std=c23 -pedantic-errors" } */
4 /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */
5 /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
7 __attribute__((noipa)) void
8 foo (unsigned _BitInt(25) a, unsigned _BitInt(27) b, unsigned _BitInt(25) *p, unsigned _BitInt(27) *q, float c)
10 p[0] = b;
11 q[0] = a;
12 q[1] = (signed _BitInt(25)) a;
13 q[2] = (_BitInt(12)) a;
14 q[3] = c;
15 q[4] += a;
16 q[5] = a + b;
17 q[6] = a - b;
18 q[7] = a * b;
19 q[8] = a / b;
20 q[9] = a % b;
21 q[10] = b << (24320393uwb - a);
22 q[11] = (b * 131uwb) >> (24320393uwb - a);
23 q[12]++;
24 ++q[13];
25 q[14]--;
26 --q[15];
27 q[16] = a == b;
28 q[17] = a != b;
29 q[18] = a > b;
30 q[19] = a < b;
31 q[20] = a >= b;
32 q[21] = a <= b;
33 q[22] = a && b;
34 q[23] = a || b;
35 q[24] = !a;
36 q[25] = a & b;
37 q[26] = a | b;
38 q[27] = a ^ b;
39 q[28] = ~a;
40 q[29] -= a;
41 q[30] *= b;
42 q[31] /= b;
43 q[32] %= a;
44 q[33] <<= (125900uwb - b);
45 q[34] >>= (125901uwb - b);
46 q[35] &= a;
47 q[36] |= b;
48 q[37] ^= a;
49 q[38] = sizeof (a);
50 q[39] = q[39] ? a : b;
51 q[40] = 24196214uwb;
52 switch (a)
54 case 12345641uwb:
55 if (b != 1244wb)
56 __builtin_abort ();
57 break;
58 case 11821400uwb:
59 if (b != 133445uwb)
60 __builtin_abort ();
61 break;
62 case 12145uwb:
63 if (b != 1212uwb)
64 __builtin_abort ();
65 break;
66 case 24320389uwb:
67 if (b != 125897uwb)
68 __builtin_abort ();
69 break;
70 case 7128412uwb:
71 if (b != 150uwb)
72 __builtin_abort ();
73 break;
74 default:
75 __builtin_abort ();
79 int
80 main ()
82 unsigned _BitInt(25) p;
83 unsigned _BitInt(27) q[41];
84 static unsigned _BitInt(27) qe[41] = {
85 24320389uwb, 124983685uwb, 134216069uwb, 42uwb, 24320407uwb,
86 24446286uwb, 24194492uwb, 89202797uwb, 193uwb, 22268uwb,
87 2014352uwb, 1030781uwb, 8uwb, 10uwb, 10uwb,
88 12uwb, 0uwb, 1uwb, 1uwb, 0uwb,
89 1uwb, 0uwb, 1uwb, 1uwb, 0uwb,
90 67969uwb, 24378317uwb, 24310348uwb, 9234042uwb, 109897346uwb,
91 125897uwb, 0uwb, 52uwb, 40uwb, 771uwb,
92 5uwb, 125917uwb, 24320384uwb, 1uwb, 24320389uwb,
93 24196214uwb
95 q[4] = 18uwb;
96 q[12] = 7uwb;
97 q[13] = 9uwb;
98 q[14] = 11uwb;
99 q[15] = 13uwb;
100 q[29] = 7uwb;
101 q[30] = -1uwb;
102 q[31] = -13uwb;
103 q[32] = 52uwb;
104 q[33] = 5uwb;
105 q[34] = 12345uwb;
106 q[35] = 15uwb;
107 q[36] = 28uwb;
108 q[37] = 5uwb;
109 q[39] = 2uwb;
110 foo (24320389uwb, 125897uwb, &p, q, 42.0f);
111 if (p != 125897uwb)
112 __builtin_abort ();
113 q[38] -= sizeof (p) - 1;
114 for (int i = 0; i < 41; ++i)
115 if (q[i] != qe[i])
116 __builtin_abort ();
117 return 0;