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?
-- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/84#note_23915