From: Zebediah Figura zfigura@codeweavers.com
--- libs/vkd3d-shader/hlsl.c | 10 ++++++++-- libs/vkd3d-shader/hlsl.h | 2 ++ libs/vkd3d-shader/hlsl.y | 2 +- libs/vkd3d-shader/hlsl_codegen.c | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c index f62057b8..3bc0ac3c 100644 --- a/libs/vkd3d-shader/hlsl.c +++ b/libs/vkd3d-shader/hlsl.c @@ -113,7 +113,7 @@ struct hlsl_ir_var *hlsl_get_var(struct hlsl_scope *scope, const char *name) void hlsl_free_var(struct hlsl_ir_var *decl) { vkd3d_free((void *)decl->name); - vkd3d_free((void *)decl->semantic.name); + hlsl_cleanup_semantic(&decl->semantic); vkd3d_free(decl); }
@@ -1997,7 +1997,7 @@ void hlsl_free_type(struct hlsl_type *type) field = &type->e.record.fields[i];
vkd3d_free((void *)field->name); - vkd3d_free((void *)field->semantic.name); + hlsl_cleanup_semantic(&field->semantic); } vkd3d_free((void *)type->e.record.fields); } @@ -2154,6 +2154,12 @@ void hlsl_free_attribute(struct hlsl_attribute *attr) vkd3d_free(attr); }
+void hlsl_cleanup_semantic(struct hlsl_semantic *semantic) +{ + vkd3d_free((void *)semantic->name); + memset(semantic, 0, sizeof(*semantic)); +} + static void free_function_decl(struct hlsl_ir_function_decl *decl) { unsigned int i; diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h index a3fd1309..53ac3363 100644 --- a/libs/vkd3d-shader/hlsl.h +++ b/libs/vkd3d-shader/hlsl.h @@ -973,7 +973,9 @@ int hlsl_emit_bytecode(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry enum vkd3d_shader_target_type target_type, struct vkd3d_shader_code *out);
bool hlsl_copy_deref(struct hlsl_ctx *ctx, struct hlsl_deref *deref, const struct hlsl_deref *other); + void hlsl_cleanup_deref(struct hlsl_deref *deref); +void hlsl_cleanup_semantic(struct hlsl_semantic *semantic);
void hlsl_replace_node(struct hlsl_ir_node *old, struct hlsl_ir_node *new);
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index 00af3f46..a0e2707f 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -922,7 +922,7 @@ static void free_parse_variable_def(struct parse_variable_def *v) free_parse_initializer(&v->initializer); vkd3d_free(v->arrays.sizes); vkd3d_free(v->name); - vkd3d_free((void *)v->semantic.name); + hlsl_cleanup_semantic(&v->semantic); vkd3d_free(v); }
diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index f6f096f1..d767c4da 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -227,7 +227,7 @@ static struct hlsl_ir_var *add_semantic_var(struct hlsl_ctx *ctx, struct hlsl_ir type, var->loc, &new_semantic, modifiers, NULL))) { hlsl_release_string_buffer(ctx, name); - vkd3d_free((void *)new_semantic.name); + hlsl_cleanup_semantic(&new_semantic); return NULL; } hlsl_release_string_buffer(ctx, name);