digitalmars.D - Behaviour of goto into catch blocks.

When it comes to using goto in D, the behaviour seems to be that you cannot
enter a try block, and neither can you enter or exit from a
finally block.
What about catch blocks? It seems that there is no restrictions imposed on
them, meaning that the following is legal.
void main()
{
goto in_catch;
try
{
throw new Exception("msg");
}
catch (Exception e)
{
in_catch:
throw e;
}
}
As strongly as I feel that goto into catch blocks shouldn't be allowed, is this
the intended behaviour of the language? If so, why?

When it comes to using goto in D, the behaviour seems to be that you cannot
enter a try block, and neither can you enter or exit from a
finally block.
What about catch blocks? It seems that there is no restrictions imposed on
them, meaning that the following is legal.
void main()
{
goto in_catch;
try
{
throw new Exception("msg");
}
catch (Exception e)
{
in_catch:
throw e;
}
}
As strongly as I feel that goto into catch blocks shouldn't be allowed, is
this the intended behaviour of the language? If so, why?

Obviously that code should be rejected -- what would be thrown?
I think there's no intrinisic problem with a goto into a catch block,
but in practice, it might as well be rejected, because it almost always
involves bypassing a variable declaration. The spec says
"It is illegal for a GotoStatement to be used to skip initializations. "
though at present the compiler doesn't enforce this.
I would have thought that a finally block would be OK, but the spec says:
"A FinallyStatement may not exit with a goto, break, continue, or
return; nor may it be entered with a goto."
So presumably going into a catch block is also supposed to be illegal.