Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/dxil.c:
for (i = 0; i < block->phi_count; ++i){struct sm6_phi *phi = &block->phi[i];const struct sm6_value *src;for (j = 0; j < phi->incoming_count; ++j){src = &sm6->values[phi->incoming[j].reg.idx[0].offset];if (!sm6_value_is_constant(src) && !sm6_value_is_undef(src) && !sm6_value_is_ssa(src)){FIXME("PHI incoming value is not a constant or SSA register.\n");vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,"A PHI incoming value is not a constant or SSA register.");return VKD3D_ERROR_INVALID_SHADER;}phi->incoming[j].reg = src->u.reg;
How hard would it be to validate that the incoming register belongs indeed to the stated block, and that that block is indeed a predecessor of the current one?