blob: 4d86256b0bd86caddd75d7d920ca55c9d55f25cc [file] [log] [blame]
/*
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 inside `scope(success)` bodies
fail_compilation/fail6889.d(24): Error: break is not inside `scope(success)` bodies
fail_compilation/fail6889.d(29): Error: continue is not inside `scope(success)` bodies
fail_compilation/fail6889.d(30): Error: break is not 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
scope(failure) { return; } // OK
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 inside `scope(exit)` bodies
fail_compilation/fail6889.d(108): Error: break is not inside `scope(exit)` bodies
fail_compilation/fail6889.d(113): Error: continue is not inside `scope(exit)` bodies
fail_compilation/fail6889.d(114): Error: break is not 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); } }