1 2 char x; 3 4 /* Valid switch statement */ 5 #ifdef TEST1 foo(void)6char 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)25char 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)46char 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)67char 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)87char 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)105char 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)120char 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)142char 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