// RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions -Wno-objc-root-class %s @class A, B, C; void test1() { goto L; // expected-error{{cannot jump}} goto L2; // expected-error{{cannot jump}} goto L3; // expected-error{{cannot jump}} @try { // expected-note {{jump bypasses initialization of @try block}} L: ; } @catch (A *x) { // expected-note {{jump bypasses initialization of @catch block}} L2: ; } @catch (B *x) { } @catch (C *c) { } @finally {// expected-note {{jump bypasses initialization of @finally block}} L3: ; } @try { goto L4; // expected-error{{cannot jump}} goto L5; // expected-error{{cannot jump}} } @catch (C *c) { // expected-note {{jump bypasses initialization of @catch block}} L5: ; goto L6; // expected-error{{cannot jump}} } @catch (B *c) { // expected-note {{jump bypasses initialization of @catch block}} L6: ; } @finally { // expected-note {{jump bypasses initialization of @finally block}} L4: ; } @try { // expected-note 2 {{jump bypasses initialization of @try block}} L7: ; } @catch (C *c) { goto L7; // expected-error{{cannot jump}} } @finally { goto L7; // expected-error{{cannot jump}} } goto L8; // expected-error{{cannot jump}} @try { } @catch (A *c) { } @catch (B *c) { } @catch (C *c) { // expected-note {{jump bypasses initialization of @catch block}} L8: ; } // rdar://6810106 id X; goto L9; // expected-error{{cannot jump}} goto L10; // ok @synchronized // expected-note {{jump bypasses initialization of @synchronized block}} ( ({ L10: ; X; })) { L9: ; } } void test2(int a) { if (a) goto L0; @try {} @finally {} L0: return; } // rdar://6803963 void test3() { @try { goto blargh; blargh: ; } @catch (...) {} } @interface Greeter + (void) hello; @end @implementation Greeter + (void) hello { @try { goto blargh; // expected-error {{cannot jump}} } @catch (...) { // expected-note {{jump bypasses initialization of @catch block}} blargh: ; } } + (void)meth2 { int n; void *P; goto L0; // expected-error {{cannot jump}} typedef int A[n]; // expected-note {{jump bypasses initialization of VLA typedef}} L0: goto L1; // expected-error {{cannot jump}} A b, c[10]; // expected-note 2 {{jump bypasses initialization of variable length array}} L1: goto L2; // expected-error {{cannot jump}} A d[n]; // expected-note {{jump bypasses initialization of variable length array}} L2: return; } @end