Module: vkd3d Branch: master Commit: 8755a92196a57070dbe5e4254c754c7b32d7bc19 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/8755a92196a57070dbe5e4254c754c...
Author: Zebediah Figura zfigura@codeweavers.com Date: Tue Jan 31 19:44:46 2023 -0600
vkd3d-shader/hlsl: Add a hlsl_cleanup_semantic() helper.
---
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 497c7763..5f4bd01a 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); }
@@ -1998,7 +1998,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); } @@ -2155,6 +2155,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 fd6abe14..f6696e4e 100644 --- a/libs/vkd3d-shader/hlsl.h +++ b/libs/vkd3d-shader/hlsl.h @@ -974,7 +974,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 25055de5..308e3dae 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);