The test case: void main() { goto L1; try { L1: { } } catch { } } Results in an ICE when trying to compile. Internal error: ../ztc/cgcod.c 989 Similarly, this produces bad codegen. void main() { goto L1; try { } catch { L1: { } } } And a segmentation fault occurs during runtime. My guess is that because the try{} body is empty, the entire block gets optimised out, but the goto statement is still left in, where it now jumps to an invalid/null address.
*** This issue has been marked as a duplicate of issue 4655 ***