target/hexagon: idef-parser fix leak of init_list
gen_inst_init_args() is called for instructions using a predicate as an rvalue. Upon first call, the list of arguments which might need initialization init_list is freed to indicate that they have been processed. For instructions without an rvalue predicate, gen_inst_init_args() isn't called and init_list will never be freed. Free init_list from free_instruction() if it hasn't already been freed. A comment in free_instruction is also updated. Signed-off-by: Anton Johansson <anjo@rev.ng> Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Reviewed-by: Brian Cain <bcain@quicinc.com> Message-Id: <20240523125901.27797-4-anjo@rev.ng> Signed-off-by: Brian Cain <bcain@quicinc.com>
This commit is contained in:
parent
348fec2afe
commit
95408ad8e2
@ -2121,9 +2121,16 @@ void free_instruction(Context *c)
|
|||||||
g_string_free(g_array_index(c->inst.strings, GString*, i), TRUE);
|
g_string_free(g_array_index(c->inst.strings, GString*, i), TRUE);
|
||||||
}
|
}
|
||||||
g_array_free(c->inst.strings, TRUE);
|
g_array_free(c->inst.strings, TRUE);
|
||||||
|
/*
|
||||||
|
* Free list of arguments that might need initialization, if they haven't
|
||||||
|
* already been freed.
|
||||||
|
*/
|
||||||
|
if (c->inst.init_list) {
|
||||||
|
g_array_free(c->inst.init_list, TRUE);
|
||||||
|
}
|
||||||
/* Free INAME token value */
|
/* Free INAME token value */
|
||||||
g_string_free(c->inst.name, TRUE);
|
g_string_free(c->inst.name, TRUE);
|
||||||
/* Free variables and registers */
|
/* Free declared TCGv variables */
|
||||||
g_array_free(c->inst.allocated, TRUE);
|
g_array_free(c->inst.allocated, TRUE);
|
||||||
/* Initialize instruction-specific portion of the context */
|
/* Initialize instruction-specific portion of the context */
|
||||||
memset(&(c->inst), 0, sizeof(Inst));
|
memset(&(c->inst), 0, sizeof(Inst));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user