[PATCH vkd3d 6/6] vkd3d-shader/hlsl: Parse state blocks in variable definitions.
Giovanni Mascellani
gmascellani at codeweavers.com
Mon Sep 27 05:20:52 CDT 2021
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.
More information about the wine-devel
mailing list