/* TEST_OUTPUT: --- fail_compilation/goto2.d(1024): Error: case cannot be in different `try` block level from `switch` fail_compilation/goto2.d(1026): Error: default cannot be in different `try` block level from `switch` fail_compilation/goto2.d(1003): Error: cannot `goto` into `try` block --- */ void foo(); void bar(); #line 1000 void test1() { goto L1; try { foo(); L1: { } } finally { bar(); } /********************************/ int i; switch (i) { case 1: try { foo(); case 2: { } default: { } } finally { bar(); } break; } } /************************************************** https://issues.dlang.org/show_bug.cgi?id=11540 goto label + try-catch-finally / with statement TEST_OUTPUT: --- fail_compilation/goto2.d(1121): Error: cannot `goto` into `try` block --- */ #line 1100 int interpret3a() { // enter to TryCatchStatement.body { bool c = false; try { if (c) // need to bypass front-end optimization throw new Exception(""); else { goto Lx; L1: c = true; } } catch (Exception e) {} Lx: if (!c) goto L1; } return 1; } /************************************************** https://issues.dlang.org/show_bug.cgi?id=11540 goto label + try-catch-finally / with statement TEST_OUTPUT: --- fail_compilation/goto2.d(1217): Error: cannot `goto` into `try` block --- */ #line 1200 int interpret3b() { // enter back to TryFinallyStatement.body { bool c = false; try { goto Lx; L1: c = true; } finally { } Lx: if (!c) goto L1; } return 1; } /************************************************** https://issues.dlang.org/show_bug.cgi?id=13815 TEST_OUTPUT: --- fail_compilation/goto2.d(1234): Error: cannot `goto` into `try` block --- */ bool f() { goto L; try { L: // line 7 throw new Exception(""); // line 8 } catch (Exception e) { return true; } return false; }