OSDN Git Service

Backported from mainline
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / 20020506-1.c
1 /* Copyright (C) 2002  Free Software Foundation.
2
3    Test that (A & C1) op C2 optimizations behave correctly where C1 is
4    a constant power of 2, op is == or !=, and C2 is C1 or zero.
5
6    Written by Roger Sayle, 5th May 2002.  */
7
8 #include <limits.h>
9
10 extern void abort (void);
11
12 void test1 (signed char c, int set);
13 void test2 (unsigned char c, int set);
14 void test3 (short s, int set);
15 void test4 (unsigned short s, int set);
16 void test5 (int i, int set);
17 void test6 (unsigned int i, int set);
18 void test7 (long long l, int set);
19 void test8 (unsigned long long l, int set);
20
21 #ifndef LONG_LONG_MAX
22 #define LONG_LONG_MAX __LONG_LONG_MAX__
23 #endif
24 #ifndef LONG_LONG_MIN
25 #define LONG_LONG_MIN (-LONG_LONG_MAX-1)
26 #endif
27 #ifndef ULONG_LONG_MAX
28 #define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
29 #endif
30
31
32 void
33 test1 (signed char c, int set)
34 {
35   if ((c & (SCHAR_MAX+1)) == 0)
36     {
37       if (set) abort ();
38     }
39   else
40     if (!set) abort ();
41
42   if ((c & (SCHAR_MAX+1)) != 0)
43     {
44       if (!set) abort ();
45     }
46   else
47     if (set) abort ();
48
49   if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1))
50     {
51       if (!set) abort ();
52     }
53   else
54     if (set) abort ();
55
56   if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1))
57     {
58       if (set) abort ();
59     }
60   else
61     if (!set) abort ();
62 }
63
64 void
65 test2 (unsigned char c, int set)
66 {
67   if ((c & (SCHAR_MAX+1)) == 0)
68     {
69       if (set) abort ();
70     }
71   else
72     if (!set) abort ();
73
74   if ((c & (SCHAR_MAX+1)) != 0)
75     {
76       if (!set) abort ();
77     }
78   else
79     if (set) abort ();
80
81   if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1))
82     {
83       if (!set) abort ();
84     }
85   else
86     if (set) abort ();
87
88   if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1))
89     {
90       if (set) abort ();
91     }
92   else
93     if (!set) abort ();
94 }
95
96 void
97 test3 (short s, int set)
98 {
99   if ((s & (SHRT_MAX+1)) == 0)
100     {
101       if (set) abort ();
102     }
103   else
104     if (!set) abort ();
105
106   if ((s & (SHRT_MAX+1)) != 0)
107     {
108       if (!set) abort ();
109     }
110   else
111     if (set) abort ();
112
113   if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1))
114     {
115       if (!set) abort ();
116     }
117   else
118     if (set) abort ();
119
120   if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1))
121     {
122       if (set) abort ();
123     }
124   else
125     if (!set) abort ();
126 }
127
128 void
129 test4 (unsigned short s, int set)
130 {
131   if ((s & (SHRT_MAX+1)) == 0)
132     {
133       if (set) abort ();
134     }
135   else
136     if (!set) abort ();
137
138   if ((s & (SHRT_MAX+1)) != 0)
139     {
140       if (!set) abort ();
141     }
142   else
143     if (set) abort ();
144
145   if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1))
146     {
147       if (!set) abort ();
148     }
149   else
150     if (set) abort ();
151
152   if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1))
153     {
154       if (set) abort ();
155     }
156   else
157     if (!set) abort ();
158 }
159
160 void
161 test5 (int i, int set)
162 {
163   if ((i & (INT_MAX+1U)) == 0)
164     {
165       if (set) abort ();
166     }
167   else
168     if (!set) abort ();
169
170   if ((i & (INT_MAX+1U)) != 0)
171     {
172       if (!set) abort ();
173     }
174   else
175     if (set) abort ();
176
177   if ((i & (INT_MAX+1U)) == (INT_MAX+1U))
178     {
179       if (!set) abort ();
180     }
181   else
182     if (set) abort ();
183
184   if ((i & (INT_MAX+1U)) != (INT_MAX+1U))
185     {
186       if (set) abort ();
187     }
188   else
189     if (!set) abort ();
190 }
191
192 void
193 test6 (unsigned int i, int set)
194 {
195   if ((i & (INT_MAX+1U)) == 0)
196     {
197       if (set) abort ();
198     }
199   else
200     if (!set) abort ();
201
202   if ((i & (INT_MAX+1U)) != 0)
203     {
204       if (!set) abort ();
205     }
206   else
207     if (set) abort ();
208
209   if ((i & (INT_MAX+1U)) == (INT_MAX+1U))
210     {
211       if (!set) abort ();
212     }
213   else
214     if (set) abort ();
215
216   if ((i & (INT_MAX+1U)) != (INT_MAX+1U))
217     {
218       if (set) abort ();
219     }
220   else
221     if (!set) abort ();
222 }
223
224 void
225 test7 (long long l, int set)
226 {
227   if ((l & (LONG_LONG_MAX+1ULL)) == 0)
228     {
229       if (set) abort ();
230     }
231   else
232     if (!set) abort ();
233
234   if ((l & (LONG_LONG_MAX+1ULL)) != 0)
235     {
236       if (!set) abort ();
237     }
238   else
239     if (set) abort ();
240
241   if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL))
242     {
243       if (!set) abort ();
244     }
245   else
246     if (set) abort ();
247
248   if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL))
249     {
250       if (set) abort ();
251     }
252   else
253     if (!set) abort ();
254 }
255
256 void
257 test8 (unsigned long long l, int set)
258 {
259   if ((l & (LONG_LONG_MAX+1ULL)) == 0)
260     {
261       if (set) abort ();
262     }
263   else
264     if (!set) abort ();
265
266   if ((l & (LONG_LONG_MAX+1ULL)) != 0)
267     {
268       if (!set) abort ();
269     }
270   else
271     if (set) abort ();
272
273   if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL))
274     {
275       if (!set) abort ();
276     }
277   else
278     if (set) abort ();
279
280   if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL))
281     {
282       if (set) abort ();
283     }
284   else
285     if (!set) abort ();
286 }
287
288 int
289 main ()
290 {
291   test1 (0, 0);
292   test1 (SCHAR_MAX, 0);
293   test1 (SCHAR_MIN, 1);
294   test1 (UCHAR_MAX, 1);
295
296   test2 (0, 0);
297   test2 (SCHAR_MAX, 0);
298   test2 (SCHAR_MIN, 1);
299   test2 (UCHAR_MAX, 1);
300
301   test3 (0, 0);
302   test3 (SHRT_MAX, 0);
303   test3 (SHRT_MIN, 1);
304   test3 (USHRT_MAX, 1);
305
306   test4 (0, 0);
307   test4 (SHRT_MAX, 0);
308   test4 (SHRT_MIN, 1);
309   test4 (USHRT_MAX, 1);
310
311   test5 (0, 0);
312   test5 (INT_MAX, 0);
313   test5 (INT_MIN, 1);
314   test5 (UINT_MAX, 1);
315
316   test6 (0, 0);
317   test6 (INT_MAX, 0);
318   test6 (INT_MIN, 1);
319   test6 (UINT_MAX, 1);
320
321   test7 (0, 0);
322   test7 (LONG_LONG_MAX, 0);
323   test7 (LONG_LONG_MIN, 1);
324   test7 (ULONG_LONG_MAX, 1);
325
326   test8 (0, 0);
327   test8 (LONG_LONG_MAX, 0);
328   test8 (LONG_LONG_MIN, 1);
329   test8 (ULONG_LONG_MAX, 1);
330
331   return 0;
332 }
333