[PATCH vkd3d v2 06/10] vkd3d-shader/hlsl: Properly free parse_variable_def memory in declare_vars().
Francisco Casas
fcasas at codeweavers.com
Mon Jan 10 13:33:14 CST 2022
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
---
libs/vkd3d-shader/hlsl.y | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
index 636882c4..988e0743 100644
--- a/libs/vkd3d-shader/hlsl.y
+++ b/libs/vkd3d-shader/hlsl.y
@@ -1424,6 +1424,9 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_INITIALIZER,
"Const variable \"%s\" is missing an initializer.", var->name);
hlsl_free_var(var);
+ free_parse_initializer(&v->initializer);
+ if (v->arrays.count)
+ vkd3d_free(v->arrays.sizes);
vkd3d_free(v);
continue;
}
@@ -1436,6 +1439,9 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
"Variable \"%s\" was already declared in this scope.", var->name);
hlsl_note(ctx, &old->loc, VKD3D_SHADER_LOG_ERROR, "\"%s\" was previously declared here.", old->name);
hlsl_free_var(var);
+ free_parse_initializer(&v->initializer);
+ if (v->arrays.count)
+ vkd3d_free(v->arrays.sizes);
vkd3d_free(v);
continue;
}
@@ -1485,6 +1491,7 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
{
hlsl_fixme(ctx, &v->loc, "Array initializer.");
free_parse_initializer(&v->initializer);
+ vkd3d_free(v->arrays.sizes);
vkd3d_free(v);
continue;
}
@@ -1507,6 +1514,9 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
list_move_tail(statements_list, v->initializer.instrs);
vkd3d_free(v->initializer.instrs);
}
+
+ if (v->arrays.count)
+ vkd3d_free(v->arrays.sizes);
vkd3d_free(v);
}
vkd3d_free(var_list);
--
2.25.1
More information about the wine-devel
mailing list