Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/hlsl.c:
+ d = hlsl_new_switch_case(ctx, NULL, &body, &c->loc); + hlsl_block_cleanup(&body); + if (!d) + { + hlsl_cleanup_ir_switch_cases(&cases); + return NULL; + } + + d->value = c->value; + d->is_default = c->is_default; + list_add_tail(&cases, &d->entry); + } + + ret = hlsl_new_switch(ctx, map_instr(map, s->selector.node), &cases, &s->node.loc); + if (!ret) + hlsl_cleanup_ir_switch_cases(&cases); Notice that here you can skip the `if (!ret)` part. I don't really care whether you leave it or not, I just noticed that you call `hlsl_block_cleanup()` unconditionally, even though the situation is the same. Your choice.
-- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/361#note_48977