1 /* Copyright (C) 2002  Free Software Foundation.
2 
3    Test that optimizing ((c>=1) && (c<=127)) into (signed char)c < 0
4    doesn't cause any problems for the compiler and behaves correctly.
5 
6    Written by Roger Sayle, 8th May 2002.  */
7 
8 #include <limits.h>
9 
10 extern void abort (void);
11 
12 void
testc(unsigned char c,int ok)13 testc (unsigned char c, int ok)
14 {
15   if ((c>=1) && (c<=SCHAR_MAX))
16     {
17       if (!ok) abort ();
18     }
19   else
20     if (ok) abort ();
21 }
22 
23 void
tests(unsigned short s,int ok)24 tests (unsigned short s, int ok)
25 {
26   if ((s>=1) && (s<=SHRT_MAX))
27     {
28       if (!ok) abort ();
29     }
30   else
31     if (ok) abort ();
32 }
33 
34 void
testi(unsigned int i,int ok)35 testi (unsigned int i, int ok)
36 {
37   if ((i>=1) && (i<=INT_MAX))
38     {
39       if (!ok) abort ();
40     }
41   else
42     if (ok) abort ();
43 }
44 
45 void
testl(unsigned long l,int ok)46 testl (unsigned long l, int ok)
47 {
48   if ((l>=1) && (l<=LONG_MAX))
49     {
50       if (!ok) abort ();
51     }
52   else
53     if (ok) abort ();
54 }
55 
56 int
main()57 main ()
58 {
59   testc (0, 0);
60   testc (1, 1);
61   testc (SCHAR_MAX, 1);
62   testc (SCHAR_MAX+1, 0);
63   testc (UCHAR_MAX, 0);
64 
65   tests (0, 0);
66   tests (1, 1);
67   tests (SHRT_MAX, 1);
68   tests (SHRT_MAX+1, 0);
69   tests (USHRT_MAX, 0);
70 
71   testi (0, 0);
72   testi (1, 1);
73   testi (INT_MAX, 1);
74   testi (INT_MAX+1U, 0);
75   testi (UINT_MAX, 0);
76 
77   testl (0, 0);
78   testl (1, 1);
79   testl (LONG_MAX, 1);
80   testl (LONG_MAX+1UL, 0);
81   testl (ULONG_MAX, 0);
82 
83   return 0;
84 }
85 
86