tree-optimization/111233 - loop splitting miscompile
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / bitint-1.c
blob347e6751b70ab7583cecc3ff6e042a5424feeb37
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 (_BitInt(6) a, _BitInt(27) b, _BitInt(6) *p, _BitInt(27) *q, float c)
10 p[0] = b;
11 q[0] = a;
12 q[1] = (unsigned _BitInt(6)) a;
13 q[2] = (unsigned _BitInt(9)) 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 << (-20wb - a);
22 q[11] = (b * 131wb) >> (-20wb - 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] <<= b;
45 q[34] >>= 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] = 12345wb;
52 switch (a)
54 case 31wb:
55 if (b != 8wb)
56 __builtin_abort ();
57 break;
58 case -18wb:
59 if (b != 9wb)
60 __builtin_abort ();
61 break;
62 case 26wb:
63 if (b != 12wb)
64 __builtin_abort ();
65 break;
66 case -25wb:
67 if (b != 6wb)
68 __builtin_abort ();
69 break;
70 case -19wb:
71 if (b != 15wb)
72 __builtin_abort ();
73 break;
74 default:
75 __builtin_abort ();
79 int
80 main ()
82 _BitInt(6) p;
83 _BitInt(27) q[41];
84 static _BitInt(27) qe[41] = {
85 -25wb, 39wb, 487wb, 17wb, -7wb, -19wb, -31wb, -150wb, -4wb, -1,
86 192wb, 24wb, 8wb, 10wb, 10wb, 12wb, 0, 1wb, 0wb, 1,
87 0, 1, 1, 1wbu, 0, 6wb, -25wb, -31wb, 24wb, 32wb,
88 -6wb, -2wb, 2uwb, 320wb, 192wb, 7wb, 30wb, -30wb, 1, -25wb,
89 12345wb
91 q[4] = 18wb;
92 q[12] = 7wb;
93 q[13] = 9wb;
94 q[14] = 11wb;
95 q[15] = 13wb;
96 q[29] = 7wb;
97 q[30] = -1wb;
98 q[31] = -13wb;
99 q[32] = 52wb;
100 q[33] = 5wb;
101 q[34] = 12345wb;
102 q[35] = 15wb;
103 q[36] = 28wb;
104 q[37] = 5wb;
105 q[39] = 2wb;
106 foo (-25wb, 6wb, &p, q, 17.0f);
107 if (p != 6wb)
108 __builtin_abort ();
109 q[38] -= sizeof (p) - 1;
110 for (int i = 0; i < 41; ++i)
111 if (q[i] != qe[i])
112 __builtin_abort ();
113 return 0;