Allow resolving headers from a PCH even after headers+PCH were moved to another path.
[clang.git] / test / SemaObjC / scope-check.m
blobbba321e65766a7e2cad56eb22e347005a9129b17
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 @class A, B, C;
5 void test1() {
6   goto L; // expected-error{{illegal goto into protected scope}}
7   goto L2; // expected-error{{illegal goto into protected scope}}
8   goto L3; // expected-error{{illegal goto into protected scope}}
9   @try {   // expected-note {{jump bypasses initialization of @try block}}
10 L: ;
11   } @catch (A *x) { // expected-note {{jump bypasses initialization of @catch block}}
12 L2: ;
13   } @catch (B *x) {
14   } @catch (C *c) {
15   } @finally {// expected-note {{jump bypasses initialization of @finally block}}
16 L3: ;
17   }
18   
19   @try {
20     goto L4; // expected-error{{illegal goto into protected scope}}
21     goto L5; // expected-error{{illegal goto into protected scope}}
22   } @catch (C *c) { // expected-note {{jump bypasses initialization of @catch block}}
23   L5: ;
24     goto L6; // expected-error{{illegal goto into protected scope}}
25   } @catch (B *c) { // expected-note {{jump bypasses initialization of @catch block}}
26   L6: ;
27   } @finally { // expected-note {{jump bypasses initialization of @finally block}}
28   L4: ;
29   }
31   
32   @try { // expected-note 2 {{jump bypasses initialization of @try block}}
33   L7: ;
34   } @catch (C *c) {
35     goto L7; // expected-error{{illegal goto into protected scope}}
36   } @finally {
37     goto L7; // expected-error{{illegal goto into protected scope}}
38   }
39   
40   goto L8;  // expected-error{{illegal goto into protected scope}}
41   @try { 
42   } @catch (A *c) {
43   } @catch (B *c) {
44   } @catch (C *c) { // expected-note {{jump bypasses initialization of @catch block}}
45   L8: ;
46   }
47   
48   // rdar://6810106
49   id X;
50   goto L9;    // expected-error{{illegal goto into protected scope}}
51   goto L10;   // ok
52   @synchronized    // expected-note {{jump bypasses initialization of @synchronized block}}
53   ( ({ L10: ; X; })) {
54   L9:
55     ;
56   }
59 void test2(int a) {
60   if (a) goto L0;
61   @try {} @finally {}
62  L0:
63   return;
66 // rdar://6803963
67 void test3() {
68   @try {
69     goto blargh;
70   blargh: ;
71   } @catch (...) {}
74 @interface Greeter
75 + (void) hello;
76 @end
78 @implementation Greeter
79 + (void) hello {
81   @try {
82     goto blargh;     // expected-error {{illegal goto into protected scope}}
83   } @catch (...) {   // expected-note {{jump bypasses initialization of @catch block}}
84   blargh: ;
85   }
88 + (void)meth2 {
89     int n; void *P;
90     goto L0;     // expected-error {{illegal goto into protected scope}}
91     typedef int A[n];  // expected-note {{jump bypasses initialization of VLA typedef}}
92   L0:
93     
94     goto L1;      // expected-error {{illegal goto into protected scope}}
95     A b, c[10];        // expected-note 2 {{jump bypasses initialization of variable length array}}
96   L1:
97     goto L2;     // expected-error {{illegal goto into protected scope}}
98     A d[n];      // expected-note {{jump bypasses initialization of variable length array}}
99   L2:
100     return;
103 @end