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:
@@ -469,7 +469,7 @@ construct_value(const nir_search_value *value,
|
||||
|
||||
switch (c->type) {
|
||||
case nir_type_float:
|
||||
load->def.name = ralloc_asprintf(mem_ctx, "%f", c->data.d);
|
||||
load->def.name = ralloc_asprintf(load, "%f", c->data.d);
|
||||
switch (bitsize->dest_size) {
|
||||
case 32:
|
||||
load->value.f32[0] = c->data.d;
|
||||
@@ -483,7 +483,7 @@ construct_value(const nir_search_value *value,
|
||||
break;
|
||||
|
||||
case nir_type_int:
|
||||
load->def.name = ralloc_asprintf(mem_ctx, "%ld", c->data.i);
|
||||
load->def.name = ralloc_asprintf(load, "%ld", c->data.i);
|
||||
switch (bitsize->dest_size) {
|
||||
case 32:
|
||||
load->value.i32[0] = c->data.i;
|
||||
@@ -497,7 +497,7 @@ construct_value(const nir_search_value *value,
|
||||
break;
|
||||
|
||||
case nir_type_uint:
|
||||
load->def.name = ralloc_asprintf(mem_ctx, "%lu", c->data.u);
|
||||
load->def.name = ralloc_asprintf(load, "%lu", c->data.u);
|
||||
switch (bitsize->dest_size) {
|
||||
case 32:
|
||||
load->value.u32[0] = c->data.u;
|
||||
|
Reference in New Issue
Block a user