Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/normalise.c:
+static bool shader_register_clone_relative_addresses(struct vkd3d_shader_register *reg,
struct vkd3d_shader_instruction_array *instructions)
+{
- struct vkd3d_shader_src_param *src;
- unsigned int i;
- for (i = 0; i < ARRAY_SIZE(reg->idx) && reg->idx[i].offset != ~0u; ++i)
- {
if (!reg->idx[i].rel_addr)
continue;
if (!(src = shader_src_param_allocator_get(&instructions->src_params, 1)))
return false;
memcpy(src, reg->idx[i].rel_addr, sizeof(*src));
reg->idx[i].rel_addr = src;
I am not familiar at all with this code, but it seems that `reg->idx[i].rel_addr` is itself of type `struct vkd3d_shader_src_param`, so it could in turn have its own `reg->idx[i].rel_addr` pointing to some other `struct vkd3d_shader_src_param`. Why isn't this a case to handle?