Fix warning with -Wsign-compare -Wsystem-headers
[official-gcc.git] / gcc / testsuite / gcc.target / avr / pr71676-3.c
blob6c10f04b964c5af53875101cebd627bf6a01bbdd
1 /* { dg-do run } */
2 /* { dg-options "-Os -fno-tree-switch-conversion" } */
4 #define MK_FUN(NAME, TYP, V) \
5 static __inline__ __attribute__((always_inline)) \
6 unsigned char value_## NAME (TYP x, unsigned char y) \
7 { \
8 switch (x) \
9 { \
10 case V + 0: return 0 + y; \
11 case V + 1: return 1; \
12 case V + 2: return 2 + y; \
13 case V + 3: return 3; \
14 case V + 4: return 4 + y; \
15 case V + 5: return 5; \
16 case V + 6: return 6 + y; \
17 case V + 7: return 7; \
18 case V + 8: return 8 + y; \
19 case V + 9: return 9; \
20 case V + 10: return 10 + y; \
21 case V + 11: return 11; \
22 case V + 12: return 12 + y; \
23 case V + 13: return 13; \
24 case V + 14: return 14 + y; \
25 case V + 15: return 15; \
26 } \
27 return x; \
28 } \
30 __attribute__((noinline,noclone)) \
31 unsigned char select_## NAME (TYP x, unsigned char y) \
32 { \
33 return value_## NAME (x, y); \
34 } \
36 static __inline__ __attribute__((always_inline)) \
37 void test1_## NAME (TYP x) \
38 { \
39 if (select_## NAME (x, 0) != value_## NAME (x, 0)) \
40 __builtin_abort(); \
41 } \
43 void test_## NAME (void) \
44 { \
45 test1_## NAME (V); \
46 test1_## NAME (V - 1); \
47 test1_## NAME (V + 15); \
48 test1_## NAME (V + 16); \
51 MK_FUN (0_s8, signed char, 0)
52 MK_FUN (0_u8, unsigned char, 0)
53 MK_FUN (0_s16, signed int, 0)
54 MK_FUN (0_u16, unsigned int, 0)
56 MK_FUN (m4_s8, signed char, -4)
57 MK_FUN (m4_s16, signed int, -4)
59 MK_FUN (4_s8, signed char, 4)
60 MK_FUN (4_u8, unsigned char, 4)
61 MK_FUN (4_s16, signed int, 4)
62 MK_FUN (4_u16, unsigned int, 4)
64 int main (void)
66 test_0_s8();
67 test_0_u8();
68 test_0_s16();
69 test_0_u16();
71 test_m4_s8();
72 test_m4_s16();
74 test_4_s8();
75 test_4_u8();
76 test_4_s16();
77 test_4_u16();
79 return 0;