1 
2 char x;
3 
4 /* Valid switch statement */
5 #ifdef TEST1
foo(void)6 char foo(void)
7 {
8   switch(x)
9     {
10       char y;
11 
12       case 0:
13         return 0;
14       case 1:
15         return 1;
16       default:
17         y = x+1;
18         return y;
19     }
20 }
21 #endif
22 
23 /* Error, duplicate cases */
24 #ifdef TEST2
foo(void)25 char foo(void)
26 {
27   switch(x)
28     {
29       char y;
30 
31       case 0:		/* IGNORE */
32         return 0;
33       case 1:
34         return 1;
35       case 0:		/* ERROR */
36         return 0;
37       default:
38         y = x;
39         return y;
40     }
41 }
42 #endif
43 
44 /* Error, more than one default */
45 #ifdef TEST3
foo(void)46 char foo(void)
47 {
48   switch(x)
49     {
50       char y;
51 
52       case 0:
53         return 0;
54       case 1:
55         return 1;
56       default:		/* IGNORE */
57         y = x;
58         return y;
59       default:		/* ERROR */
60         return 2;
61     }
62 }
63 #endif
64 
65 /* Warn about unreachable code */
66 #ifdef TEST4
foo(void)67 char foo(void)
68 {
69   switch(x)
70     {
71       char y; /* IGNORE */
72       x++;		/* WARNING(SDCC) */
73 
74       case 0:
75         return 0;
76       case 1:
77         return 1;
78       default:
79         y = x;
80         return x;
81     }
82 }
83 #endif
84 
85 /* Warn about unreachable initializer */
86 #ifdef TEST5
foo(void)87 char foo(void)
88 {
89   switch(x)
90     {
91       char y=1;		/* WARNING(SDCC) */
92 
93       case 0:
94         return 0;
95       case 1:
96         return 1;
97       default:
98         return y;	/* IGNORE */
99     }
100 }
101 #endif
102 
103 /* Error, missing switch */
104 #ifdef TEST6
foo(void)105 char foo(void)
106 {
107     {
108       case 0:		/* ERROR */
109         return 0;
110       case 1:		/* ERROR */
111         return 1;
112       default:		/* ERROR */
113         return x;
114     }
115 }
116 #endif
117 
118 /* Error, switch condition must be integral */
119 #ifdef TEST7
foo(void)120 char foo(void)
121 {
122   float f; /* IGNORE */
123   f=x;
124   switch(f)		/* ERROR */
125     {
126       char y; /* IGNORE */
127 
128       case 0:
129         return 0;
130       case 1:
131         return 1;
132       default:
133         y = x;
134         return x;
135     }
136   return 0;
137 }
138 #endif
139 
140 /* Error, cases must be integral */
141 #ifdef TEST8
foo(void)142 char foo(void)
143 {
144   switch(x)
145     {
146       char y; /* IGNORE */
147 
148       case 0.0:		/* ERROR */
149         return 0;
150       case 1:
151         return 1;
152       default:
153         y = x;
154         return x;
155     }
156 }
157 #endif
158 
159