https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103328
--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> --- And static void verify_scope_blocks (tree block, tree supercontext) { gcc_assert (BLOCK_SUPERCONTEXT (block) == supercontext); for (tree t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t)) verify_scope_blocks (t, block); } with checking inside gimplify_function_tree verify_scope_blocks (DECL_INITIAL (current_function_decl), current_function_decl); ICEs first with #1 0x00000000013ca52a in verify_scope_blocks (block=<block 0x7ffff63cacc0>, supercontext=<block 0x7ffff63cad20>) at /home/rguenther/src/gcc3/gcc/gimplify.c:16044 16044 gcc_assert (BLOCK_SUPERCONTEXT (block) == supercontext); gdb) p cfun->decl $1 = <function_decl 0x7ffff63b5600 io_fiber> (gdb) p block->block.supercontext->block.supercontext->block.supercontext->block.supercontext $12 = <tree 0x0> possibly 'block' was added into another function, but it roots at NULL... somehow all the BLOCK setup is done in poplevel() but I can't see what's wrong.