mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
143 lines
2.4 KiB
D
143 lines
2.4 KiB
D
/*
|
|
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;
|
|
}
|