nir: fix dangling ssadef->name ptrs
In many places, the convention is to pass an existing ssadef name ptr when construction/initializing a new nir_ssa_def. But that goes badly (as noticed by garbage in nir_print output) when the original string gets freed. Just use ralloc_strdup() instead, and add ralloc_free() in the two places that would care (not that the strings wouldn't eventually get freed anyways). Also fixup the nir_search code which was directly setting ssadef->name to use the parent instruction as memctx. Signed-off-by: Rob Clark <robclark@freedesktop.org> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -1317,12 +1317,13 @@ nir_instr_rewrite_dest(nir_instr *instr, nir_dest *dest, nir_dest new_dest)
|
||||
src_add_all_uses(dest->reg.indirect, instr, NULL);
|
||||
}
|
||||
|
||||
/* note: does *not* take ownership of 'name' */
|
||||
void
|
||||
nir_ssa_def_init(nir_instr *instr, nir_ssa_def *def,
|
||||
unsigned num_components,
|
||||
unsigned bit_size, const char *name)
|
||||
{
|
||||
def->name = name;
|
||||
def->name = ralloc_strdup(instr, name);
|
||||
def->parent_instr = instr;
|
||||
list_inithead(&def->uses);
|
||||
list_inithead(&def->if_uses);
|
||||
@@ -1339,6 +1340,7 @@ nir_ssa_def_init(nir_instr *instr, nir_ssa_def *def,
|
||||
}
|
||||
}
|
||||
|
||||
/* note: does *not* take ownership of 'name' */
|
||||
void
|
||||
nir_ssa_dest_init(nir_instr *instr, nir_dest *dest,
|
||||
unsigned num_components, unsigned bit_size,
|
||||
|
Reference in New Issue
Block a user