OSDN Git Service

* doc/passes.texi (Tree-SSA passes): Document SLP pass.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / c99-stdint-1.c
1 /* Verify that <stdint.h> is present and follows the C99 requirements.
2    If this test fails because of the header being missing on a
3    particular target, this indicates GCC has not been correctly
4    configured regarding what version of <stdint.h> to install or what
5    the <stdint.h> types are on that target.  If GCC is wrapping a
6    system copy of the header and some tests fail because of bugs in
7    that copy, they should be fixed with fixincludes (and the bugs
8    reported to maintainer of that copy if still present in the latest
9    version).  */
10 /* { dg-do compile } */
11 /* { dg-options "-std=iso9899:1999 -pedantic-errors -fhosted" } */
12
13 #include <limits.h>
14 #include <stdint.h>
15 /* This and the later SIG_ATOMIC_* tests should be appropriately
16    conditioned for any freestanding targets with no <signal.h>.  */
17 #include <signal.h>
18
19 /* Note that some of these conditions assume two's complement and no
20    padding bits; GCC only supports two's complement, and no supported
21    target has padding bits in any integer type of the standard
22    widths.  */
23 #define CHECK_SIGNED(TYPE) \
24   do { TYPE a; int b[(TYPE)-1 < 0 ? 1 : -1]; } while (0)
25 #define CHECK_UNSIGNED(TYPE) \
26   do { TYPE a; int b[(TYPE)-1 < 0 ? -1 : 1]; } while (0)
27 #define CHECK_WIDTH_EQUALS(TYPE, WIDTH) \
28   do { int a[sizeof(TYPE) * CHAR_BIT == (WIDTH) ? 1 : -1]; } while (0)
29 #define CHECK_WIDTH_AT_LEAST(TYPE, WIDTH) \
30   do { int a[sizeof(TYPE) * CHAR_BIT >= (WIDTH) ? 1 : -1]; } while (0)
31 #define CHECK_WIDTH_ORDER(TYPE1, TYPE2) \
32   do { int a[sizeof(TYPE2) >= sizeof(TYPE1) ? 1 : -1]; } while (0)
33 #define CHECK_EXPR_TYPE(TYPE, EXPR) \
34   do { __typeof__(EXPR) a; __typeof__((TYPE)0 + 0) *b = &a; } while (0)
35 #define UNSIGNED_MAX_COND(TYPE, EXPR) \
36   ((EXPR) == (TYPE)-1)
37 #define SIGNED_MIN_MAX_COND(TYPE, MIN, MAX)                             \
38   ((MIN) == -(MAX)-1                                                    \
39    && ((MAX) & 1)                                                       \
40    && ((((MAX) >> 1) + 1) >> (sizeof(TYPE) * CHAR_BIT - 2)) == 1)
41 #define MIN_MAX_COND(TYPE, MIN, MAX)                    \
42   ((TYPE)-1 < 0                                         \
43    ? SIGNED_MIN_MAX_COND(TYPE, (MIN), (MAX))            \
44    : ((MIN) == 0 && UNSIGNED_MAX_COND(TYPE, (MAX))))
45 #define CHECK_SIGNED_LIMITS(TYPE, MIN, MAX)                             \
46   CHECK_SIGNED(TYPE);                                                   \
47   CHECK_EXPR_TYPE(TYPE, (MIN));                                         \
48   CHECK_EXPR_TYPE(TYPE, (MAX));                                         \
49   do { int a[SIGNED_MIN_MAX_COND(TYPE, (MIN), (MAX)) ? 1 : -1]; } while (0)
50 #define CHECK_SIGNED_LIMITS_2(TYPE, MIN, MAX, MINBD, MAXBD)     \
51   CHECK_SIGNED(TYPE);                                           \
52   CHECK_EXPR_TYPE(TYPE, (MIN));                                 \
53   CHECK_EXPR_TYPE(TYPE, (MAX));                                 \
54   do { int a[(SIGNED_MIN_MAX_COND(TYPE, (MIN), (MAX))           \
55               && (MIN) <= (MINBD)                               \
56               && (MAX) >= (MAXBD)) ? 1 : -1]; } while (0)
57 #define CHECK_UNSIGNED_LIMITS(TYPE, MAX)                                \
58   CHECK_UNSIGNED(TYPE);                                                 \
59   CHECK_EXPR_TYPE(TYPE, (MAX));                                         \
60   do { int a[UNSIGNED_MAX_COND(TYPE, (MAX)) ? 1 : -1]; } while (0)
61 #define CHECK_UNSIGNED_LIMITS_2(TYPE, MAX, MAXBD)               \
62   CHECK_UNSIGNED(TYPE);                                         \
63   CHECK_EXPR_TYPE(TYPE, (MAX));                                 \
64   do { int a[(UNSIGNED_MAX_COND(TYPE, (MAX))                    \
65               && (MAX) >= (MAXBD)) ? 1 : -1]; } while (0)
66 #define CHECK_LIMITS_2(TYPE, MIN, MAX, SMINBD, SMAXBD, UMAXBD)  \
67   do { int a[(MIN_MAX_COND(TYPE, (MIN), (MAX))                  \
68               && ((TYPE)-1 < 0                                  \
69                   ? ((MIN) <= (SMINBD) && (MAX) >= (SMAXBD))    \
70                   : (MAX) >= (UMAXBD))) ? 1 : -1]; } while (0)
71 #define CHECK_CONSTS(TYPE, MACRO)                               \
72   CHECK_EXPR_TYPE(TYPE, MACRO(01));                             \
73   CHECK_EXPR_TYPE(TYPE, MACRO(2));                              \
74   CHECK_EXPR_TYPE(TYPE, MACRO(0x3));                            \
75   do { int a[(MACRO(12) == 12                                   \
76               && MACRO(012) == 012                              \
77               && MACRO(0x12) == 0x12) ? 1 : -1]; } while (0);
78
79 void
80 test_exact (void)
81 {
82 #ifdef INT8_MIN
83   CHECK_WIDTH_EQUALS(int8_t, 8);
84   CHECK_SIGNED_LIMITS(int8_t, INT8_MIN, INT8_MAX);
85 #else
86   CHECK_WIDTH_AT_LEAST(int_least8_t, 9);
87 #endif
88 #ifdef INT16_MIN
89   CHECK_WIDTH_EQUALS(int16_t, 16);
90   CHECK_SIGNED_LIMITS(int16_t, INT16_MIN, INT16_MAX);
91 #else
92   CHECK_WIDTH_AT_LEAST(int_least16_t, 17);
93 #endif
94 #ifdef INT32_MIN
95   CHECK_WIDTH_EQUALS(int32_t, 32);
96   CHECK_SIGNED_LIMITS(int32_t, INT32_MIN, INT32_MAX);
97 #else
98   CHECK_WIDTH_AT_LEAST(int_least32_t, 33);
99 #endif
100 #ifdef INT64_MIN
101   CHECK_WIDTH_EQUALS(int64_t, 64);
102   CHECK_SIGNED_LIMITS(int64_t, INT64_MIN, INT64_MAX);
103 #else
104   CHECK_WIDTH_AT_LEAST(int_least64_t, 65);
105 #endif
106 #ifdef UINT8_MAX
107   CHECK_WIDTH_EQUALS(uint8_t, 8);
108   CHECK_UNSIGNED_LIMITS(uint8_t, UINT8_MAX);
109 #else
110   CHECK_WIDTH_AT_LEAST(uint_least8_t, 9);
111 #endif
112 #ifdef UINT16_MAX
113   CHECK_WIDTH_EQUALS(uint16_t, 16);
114   CHECK_UNSIGNED_LIMITS(uint16_t, UINT16_MAX);
115 #else
116   CHECK_WIDTH_AT_LEAST(uint_least16_t, 17);
117 #endif
118 #ifdef UINT32_MAX
119   CHECK_WIDTH_EQUALS(uint32_t, 32);
120   CHECK_UNSIGNED_LIMITS(uint32_t, UINT32_MAX);
121 #else
122   CHECK_WIDTH_AT_LEAST(uint_least32_t, 33);
123 #endif
124 #ifdef UINT64_MAX
125   CHECK_WIDTH_EQUALS(uint64_t, 64);
126   CHECK_UNSIGNED_LIMITS(uint64_t, UINT64_MAX);
127 #else
128   CHECK_WIDTH_AT_LEAST(uint_least64_t, 65);
129 #endif
130 }
131
132 void
133 test_least (void)
134 {
135   CHECK_WIDTH_AT_LEAST(int_least8_t, 8);
136   CHECK_WIDTH_ORDER(int_least8_t, int_fast8_t);
137   CHECK_SIGNED_LIMITS(int_least8_t, INT_LEAST8_MIN, INT_LEAST8_MAX);
138   CHECK_WIDTH_AT_LEAST(int_least16_t, 16);
139   CHECK_WIDTH_ORDER(int_least16_t, int_fast16_t);
140   CHECK_SIGNED_LIMITS(int_least16_t, INT_LEAST16_MIN, INT_LEAST16_MAX);
141   CHECK_WIDTH_AT_LEAST(int_least32_t, 32);
142   CHECK_WIDTH_ORDER(int_least32_t, int_fast32_t);
143   CHECK_SIGNED_LIMITS(int_least32_t, INT_LEAST32_MIN, INT_LEAST32_MAX);
144   CHECK_WIDTH_AT_LEAST(int_least64_t, 64);
145   CHECK_WIDTH_ORDER(int_least64_t, int_fast64_t);
146   CHECK_SIGNED_LIMITS(int_least64_t, INT_LEAST64_MIN, INT_LEAST64_MAX);
147   CHECK_WIDTH_AT_LEAST(uint_least8_t, 8);
148   CHECK_WIDTH_ORDER(uint_least8_t, uint_fast8_t);
149   CHECK_UNSIGNED_LIMITS(uint_least8_t, UINT_LEAST8_MAX);
150   CHECK_WIDTH_AT_LEAST(uint_least16_t, 16);
151   CHECK_WIDTH_ORDER(uint_least16_t, uint_fast16_t);
152   CHECK_UNSIGNED_LIMITS(uint_least16_t, UINT_LEAST16_MAX);
153   CHECK_WIDTH_AT_LEAST(uint_least32_t, 32);
154   CHECK_WIDTH_ORDER(uint_least32_t, uint_fast32_t);
155   CHECK_UNSIGNED_LIMITS(uint_least32_t, UINT_LEAST32_MAX);
156   CHECK_WIDTH_AT_LEAST(uint_least64_t, 64);
157   CHECK_WIDTH_ORDER(uint_least64_t, uint_fast64_t);
158   CHECK_UNSIGNED_LIMITS(uint_least64_t, UINT_LEAST64_MAX);
159 }
160
161 void
162 test_fast (void)
163 {
164   CHECK_WIDTH_AT_LEAST(int_fast8_t, 8);
165   CHECK_SIGNED_LIMITS(int_fast8_t, INT_FAST8_MIN, INT_FAST8_MAX);
166   CHECK_WIDTH_AT_LEAST(int_fast16_t, 16);
167   CHECK_SIGNED_LIMITS(int_fast16_t, INT_FAST16_MIN, INT_FAST16_MAX);
168   CHECK_WIDTH_AT_LEAST(int_fast32_t, 32);
169   CHECK_SIGNED_LIMITS(int_fast32_t, INT_FAST32_MIN, INT_FAST32_MAX);
170   CHECK_WIDTH_AT_LEAST(int_fast64_t, 64);
171   CHECK_SIGNED_LIMITS(int_fast64_t, INT_FAST64_MIN, INT_FAST64_MAX);
172   CHECK_WIDTH_AT_LEAST(uint_fast8_t, 8);
173   CHECK_UNSIGNED_LIMITS(uint_fast8_t, UINT_FAST8_MAX);
174   CHECK_WIDTH_AT_LEAST(uint_fast16_t, 16);
175   CHECK_UNSIGNED_LIMITS(uint_fast16_t, UINT_FAST16_MAX);
176   CHECK_WIDTH_AT_LEAST(uint_fast32_t, 32);
177   CHECK_UNSIGNED_LIMITS(uint_fast32_t, UINT_FAST32_MAX);
178   CHECK_WIDTH_AT_LEAST(uint_fast64_t, 64);
179   CHECK_UNSIGNED_LIMITS(uint_fast64_t, UINT_FAST64_MAX);
180 }
181
182 void
183 test_ptr (void)
184 {
185 #ifdef INTPTR_MIN
186   CHECK_SIGNED_LIMITS_2(intptr_t, INTPTR_MIN, INTPTR_MAX, -0x7fff, 0x7fff);
187 #endif
188 #ifdef UINTPTR_MAX
189   CHECK_UNSIGNED_LIMITS_2(uintptr_t, UINTPTR_MAX, 0xffffU);
190 #endif
191 }
192
193 void
194 test_max (void)
195 {
196   CHECK_WIDTH_AT_LEAST(intmax_t, 64);
197   CHECK_WIDTH_ORDER(long long, intmax_t);
198   CHECK_WIDTH_ORDER(int_fast8_t, intmax_t);
199   CHECK_WIDTH_ORDER(int_fast16_t, intmax_t);
200   CHECK_WIDTH_ORDER(int_fast32_t, intmax_t);
201   CHECK_WIDTH_ORDER(int_fast64_t, intmax_t);
202   CHECK_SIGNED_LIMITS(intmax_t, INTMAX_MIN, INTMAX_MAX);
203   CHECK_WIDTH_AT_LEAST(uintmax_t, 64);
204   CHECK_WIDTH_ORDER(unsigned long long, uintmax_t);
205   CHECK_WIDTH_ORDER(uint_fast8_t, uintmax_t);
206   CHECK_WIDTH_ORDER(uint_fast16_t, uintmax_t);
207   CHECK_WIDTH_ORDER(uint_fast32_t, uintmax_t);
208   CHECK_WIDTH_ORDER(uint_fast64_t, uintmax_t);
209   CHECK_UNSIGNED_LIMITS(uintmax_t, UINTMAX_MAX);
210 }
211
212 void
213 test_misc_limits (void)
214 {
215   CHECK_SIGNED_LIMITS_2(__PTRDIFF_TYPE__, PTRDIFF_MIN, PTRDIFF_MAX, -65535L, 65535L);
216   CHECK_LIMITS_2(sig_atomic_t, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX, -127, 127, 255);
217   CHECK_UNSIGNED_LIMITS_2(__SIZE_TYPE__, SIZE_MAX, 65535U);
218   CHECK_LIMITS_2(__WCHAR_TYPE__, WCHAR_MIN, WCHAR_MAX, -127, 127, 255);
219   CHECK_LIMITS_2(__WINT_TYPE__, WINT_MIN, WINT_MAX, -32767, 32767, 65535);
220 }
221
222 void
223 test_constants (void)
224 {
225   CHECK_CONSTS(int_least8_t, INT8_C);
226   CHECK_CONSTS(int_least16_t, INT16_C);
227   CHECK_CONSTS(int_least32_t, INT32_C);
228   CHECK_CONSTS(int_least64_t, INT64_C);
229   CHECK_CONSTS(intmax_t, INTMAX_C);
230   CHECK_CONSTS(uint_least8_t, UINT8_C);
231   CHECK_CONSTS(uint_least16_t, UINT16_C);
232   CHECK_CONSTS(uint_least32_t, UINT32_C);
233   CHECK_CONSTS(uint_least64_t, UINT64_C);
234   CHECK_CONSTS(uintmax_t, UINTMAX_C);
235 #if INT8_C(12) != 12
236 #error "INT8_C not usable in #if"
237 #endif
238 #if INT16_C(12) != 12
239 #error "INT16_C not usable in #if"
240 #endif
241 #if INT32_C(12) != 12
242 #error "INT32_C not usable in #if"
243 #endif
244 #if INT64_C(12) != 12
245 #error "INT64_C not usable in #if"
246 #endif
247 #if INTMAX_C(12) != 12
248 #error "INTMAX_C not usable in #if"
249 #endif
250 #if UINT8_C(12) != 12
251 #error "UINT8_C not usable in #if"
252 #endif
253 #if UINT16_C(12) != 12
254 #error "UINT16_C not usable in #if"
255 #endif
256 #if UINT32_C(12) != 12
257 #error "UINT32_C not usable in #if"
258 #endif
259 #if UINT64_C(12) != 12
260 #error "UINT64_C not usable in #if"
261 #endif
262 #if UINTMAX_C(12) != 12
263 #error "UINTMAX_C not usable in #if"
264 #endif
265 }