Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/ir.c:
+ + if (!(breakable_cf_info = cf_flattener_find_innermost_breakable_cf_construct(flattener))) + { + FIXME("Unhandled break instruction.\n"); + return VKD3D_ERROR_INVALID_SHADER; + } + + if (breakable_cf_info->current_block == VKD3D_BLOCK_LOOP) + { + cf_flattener_emit_unconditional_branch(flattener, breakable_cf_info->u.loop.merge_block_id); + } + else if (breakable_cf_info->current_block == VKD3D_BLOCK_SWITCH) + { + /* The current case block may have already been ended by an + * unconditional continue instruction. */ + if (breakable_cf_info->inside_block) I don't think this can happen any more, after the `remove_dead_code()` pass. I added an `assert(breakable_cf_info->inside_block);` at line 1865 and it never hit on my collection of shaders.
-- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/450#note_52520