1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 // <rdar://problem/7971948>
7 switch (a) { // expected-error{{use of undeclared identifier 'a'}}
13 case 17 // expected-error{{expected ':' after 'case'}}
16 default // expected-error{{expected ':' after 'default'}}
24 switch (x) { // expected-warning {{enumeration value 'Xb' not handled in switch}}
25 case Xa; // expected-error {{expected ':' after 'case'}}
30 default; // expected-error {{expected ':' after 'default'}}
38 2: return 1; // expected-error {{expected 'case' keyword before expression}}
46 1: return -1; // expected-error {{expected 'case' keyword before expression}}
52 case 1: case 2: case 3: return 1;
54 4:5:6:7: return 2; // expected-error 4{{expected 'case' keyword before expression}}
64 // This class provides extra single colon tokens. Make sure no
65 // errors are seen here.
72 5: // expected-error {{expected 'case' keyword before expression}}
80 true ? 1 : 2: // expected-error {{expected 'case' keyword before expression}}
82 14 ? 3 : 4; // expected-warning {{expression result unused}}
91 A: return 0; // FIXME: give a warning for unused labels that could also be
97 // Stress test to make sure Clang doesn't crash.
98 void test9(int x) { // expected-note {{'x' declared here}}
101 2: case; // expected-error {{expected 'case' keyword before expression}} \
102 expected-error {{expected expression}}
103 4:5:6: return; // expected-error 3{{expected 'case' keyword before expression}}
104 7: :x; // expected-error {{expected 'case' keyword before expression}} \
105 expected-error {{expected expression}}
106 8:: x; // expected-error {{expected ';' after expression}} \
107 expected-error {{no member named 'x' in the global namespace; did you mean simply 'x'?}} \
108 expected-warning {{expression result unused}}
109 9:: :y; // expected-error {{expected ';' after expression}} \
110 expected-error {{expected unqualified-id}} \
111 expected-warning {{expression result unused}}
112 :; // expected-error {{expected expression}}
113 ::; // expected-error {{expected unqualified-id}}
122 2: y++; // expected-error {{expected ';' after expression}} \
123 // expected-warning {{expression result unused}}
137 E: break; // FIXME: give a 'case' fix-it for unused labels that
138 // could also be an expression an a case label.
139 E+1: break; // expected-error {{expected 'case' keyword before expression}}
146 0: // expected-error {{expected 'case' keyword before expression}}
148 1: // expected-error {{expected 'case' keyword before expression}}
150 2: // expected-error {{expected 'case' keyword before expression}}
152 3: // expected-error {{expected 'case' keyword before expression}}
160 void missing_statement_case(int x) {
163 case 0: // expected-error {{label at end of compound statement: expected statement}}
167 void missing_statement_default(int x) {
170 default: // expected-error {{label at end of compound statement: expected statement}}
175 switch (int x) // expected-error {{variable declaration in condition must have an initializer}}
176 case v: ; // expected-error {{use of undeclared identifier 'v'}}
179 void pr19022_1a(int x) {
181 case 1 // expected-error{{expected ':' after 'case'}} \
182 // expected-error{{label at end of compound statement: expected statement}}
186 void pr19022_1b(int x) {
188 case v // expected-error{{use of undeclared identifier 'v'}} \
189 // expected-error{{expected ':' after 'case'}}
190 } // expected-error{{expected statement}}
194 switch (int x) // expected-error {{variable declaration in condition must have an initializer}}
195 case v1: case v2: ; // expected-error {{use of undeclared identifier 'v1'}} \
196 // expected-error {{use of undeclared identifier 'v2'}}
199 void pr19022_3(int x) {
201 case 1: case v2: ; // expected-error {{use of undeclared identifier 'v2'}}
204 int pr19022_4(int x) {
206 case 1 // expected-error{{expected ':' after 'case'}} expected-note{{previous case defined here}}
207 case 1 : return x; // expected-error{{duplicate case value '1'}}
211 void pr19022_5(int x) {
213 case 1: case // expected-error{{expected ':' after 'case'}} \
214 // expected-error{{expected statement}}
215 } // expected-error{{expected expression}}
221 switch (int foo0) //expected-error{{variable declaration in condition must have an initializer}}
222 case bar5: ; // expected-error{{use of undeclared identifier 'bar5'}}
229 switch (0 // expected-note{{to match this '('}}
230 { // expected-error{{expected ')'}}
232 } // expected-error{{expected statement}}