Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjC / scope-check.m
blob2a25c7ff4d48a5e5df8a2ce32917e8c8d76ac260
1 // RUN: %clang_cc1 -triple x86_64-apple-macosx10.10 -fsyntax-only -verify -fobjc-exceptions -Wno-objc-root-class %s
3 @class A, B, C;
5 void test1(void) {
6   goto L; // expected-error{{cannot jump}}
7   goto L2; // expected-error{{cannot jump}}
8   goto L3; // expected-error{{cannot jump}}
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   }
19   @try {
20     goto L4; // expected-error{{cannot jump}}
21     goto L5; // expected-error{{cannot jump}}
22   } @catch (C *c) { // expected-note {{jump bypasses initialization of @catch block}}
23   L5: ;
24     goto L6; // expected-error{{cannot jump}}
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   }
32   @try { // expected-note 2 {{jump bypasses initialization of @try block}}
33   L7: ;
34   } @catch (C *c) {
35     goto L7; // expected-error{{cannot jump}}
36   } @finally {
37     goto L7; // expected-error{{cannot jump}}
38   }
40   goto L8;  // expected-error{{cannot jump}}
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   id X;
48   goto L9;    // expected-error{{cannot jump}}
49   @synchronized (X)  // expected-note {{jump bypasses initialization of @synchronized block}}
50   {
51   L9:
52     ;
53   }
56 void test2(int a) {
57   if (a) goto L0;
58   @try {} @finally {}
59  L0:
60   return;
63 void test3(void) {
64   @try {
65     goto blargh;
66   blargh: ;
67   } @catch (...) {}
70 @interface Greeter
71 + (void) hello;
72 @end
74 @implementation Greeter
75 + (void) hello {
77   @try {
78     goto blargh;     // expected-error {{cannot jump}}
79   } @catch (...) {   // expected-note {{jump bypasses initialization of @catch block}}
80   blargh: ;
81   }
84 + (void)meth2 {
85     int n; void *P;
86     goto L0;     // expected-error {{cannot jump}}
87     typedef int A[n];  // expected-note {{jump bypasses initialization of VLA typedef}}
88   L0:
90     goto L1;      // expected-error {{cannot jump}}
91     A b, c[10];        // expected-note 2 {{jump bypasses initialization of variable length array}}
92   L1:
93     goto L2;     // expected-error {{cannot jump}}
94     A d[n];      // expected-note {{jump bypasses initialization of variable length array}}
95   L2:
96     return;
99 @end