| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail6889.d(16): Error: cannot `goto` out of `scope(success)` block |
| fail_compilation/fail6889.d(17): Error: cannot `goto` in to `scope(success)` block |
| fail_compilation/fail6889.d(19): Error: `return` statements cannot be in `scope(success)` bodies |
| fail_compilation/fail6889.d(23): Error: `continue` is not allowed inside `scope(success)` bodies |
| fail_compilation/fail6889.d(24): Error: `break` is not allowed inside `scope(success)` bodies |
| fail_compilation/fail6889.d(29): Error: `continue` is not allowed inside `scope(success)` bodies |
| fail_compilation/fail6889.d(30): Error: `break` is not allowed inside `scope(success)` bodies |
| --- |
| */ |
| void test_success() |
| { |
| L1: |
| scope(success) { L2: goto L1; } // NG |
| goto L2; // NG |
| |
| scope(success) { return; } // NG (from fail102.d) |
| |
| foreach (i; 0..1) |
| { |
| scope(success) continue; // NG |
| scope(success) break; // NG |
| } |
| |
| foreach (i; Aggr()) |
| { |
| scope(success) continue; // NG |
| scope(success) break; // NG |
| } |
| /+ |
| // is equivalent with: |
| switch ( |
| Aggr().opApply((int i){ |
| scope(success) return 0; // NG |
| scope(success) return 1; // NG |
| return 0; |
| })) |
| { |
| default: break; |
| } |
| +/ |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail6889.d(56): Error: cannot `goto` in to `scope(failure)` block |
| --- |
| */ |
| void test_failure() |
| { |
| L1: |
| scope(failure) { L2: goto L1; } // OK |
| goto L2; // NG |
| |
| |
| |
| foreach (i; 0..1) |
| { |
| scope(failure) continue; // OK |
| scope(failure) break; // OK |
| } |
| |
| foreach (i; Aggr()) |
| { |
| scope(failure) continue; // OK |
| scope(failure) break; // OK |
| } |
| /+ |
| // is equivalent with: |
| switch ( |
| Aggr().opApply((int i){ |
| scope(failure) return 0; // OK |
| scope(failure) return 1; // OK |
| return 0; |
| })) |
| { |
| default: break; |
| } |
| +/ |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail6889.d(100): Error: cannot `goto` out of `scope(exit)` block |
| fail_compilation/fail6889.d(101): Error: cannot `goto` in to `scope(exit)` block |
| fail_compilation/fail6889.d(103): Error: `return` statements cannot be in `scope(exit)` bodies |
| fail_compilation/fail6889.d(107): Error: `continue` is not allowed inside `scope(exit)` bodies |
| fail_compilation/fail6889.d(108): Error: `break` is not allowed inside `scope(exit)` bodies |
| fail_compilation/fail6889.d(113): Error: `continue` is not allowed inside `scope(exit)` bodies |
| fail_compilation/fail6889.d(114): Error: `break` is not allowed inside `scope(exit)` bodies |
| --- |
| */ |
| void test_exit() |
| { |
| L1: |
| scope(exit) { L2: goto L1; } // NG |
| goto L2; // NG |
| |
| scope(exit) { return; } // NG (from fail102.d) |
| |
| foreach (i; 0..1) |
| { |
| scope(exit) continue; // NG |
| scope(exit) break; // NG |
| } |
| |
| foreach (i; Aggr()) |
| { |
| scope(exit) continue; // NG |
| scope(exit) break; // NG |
| } |
| /+ |
| // is equivalent with: |
| switch ( |
| Aggr().opApply((int i){ |
| scope(exit) return 0; // NG |
| scope(exit) return 1; // NG |
| return 0; |
| })) |
| { |
| default: break; |
| } |
| +/ |
| } |
| |
| struct Aggr { int opApply(int delegate(int) dg) { return dg(0); } } |