Hi,
Il 25/09/21 14:09, Matteo Bruni ha scritto:
- | NEW_IDENTIFIER
{if (ctx->in_state_block){struct hlsl_ir_load *load;struct hlsl_ir_var *var;if (!(var = hlsl_new_var(ctx, $1, ctx->builtin_types.scalar[HLSL_TYPE_INT], @1, NULL, 0, NULL)))YYABORT;if (!(load = hlsl_new_var_load(ctx, var, @1)))YYABORT;if (!($$ = make_list(ctx, &load->node))){hlsl_free_instr(&load->node);YYABORT;}}This leaks var on error.
Also, the node is doubly freed in the error path (because make_list already frees the node when it fails). Maybe the outer hlsl_free_instr was meant to free the variable instead (though the variable must also be freed when hlsl_new_var_load fails).
That said, I didn't know about this strange HLSL feature, so I don't know what the intended behavior would be. Does anybody have a link? Searching for "hlsl state block" didn't help much.
Thanks, Giovanni.