Zebediah Figura (@zfigura) commented about libs/vkd3d-shader/hlsl.c:
{ + struct hlsl_ir_switch_case *c; struct hlsl_ir_switch *s; + bool has_default = false; + + /* Check for duplicated cases and multiple default statements. */ + LIST_FOR_EACH_ENTRY(c, cases, struct hlsl_ir_switch_case, entry) + { + if (has_default && c->is_default) + hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_INVALID_SYNTAX, "Found multiple 'default' statements."); + + if (hlsl_switch_has_case(c, cases)) + hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_INVALID_SYNTAX, "Found duplicate 'case' statement."); + + has_default |= c->is_default; + } In general we want error reporting to live in the frontend if possible.
INVALID_SYNTAX is also... not what I would use here; I think this may warrant a new error message. Something nice to have here would be to print the case value itself. Also nice would be to print the location of the previous definition in a hlsl_note(). -- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/361#note_49498