[PATCH vkd3d] vkd3d-shader/hlsl: Do not swallow compilation errors.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Fri Aug 27 12:18:07 CDT 2021
On 8/27/21 5:12 AM, Giovanni Mascellani wrote:
> There are cases where compilation fails, but no error message is
> recorded. They usually correspond to unimplemented features, but
> still failure should be forwarded to the caller, otherwise it will
> manifest itself later in more confusing ways (like not being able
> to find a function even though it was apparently correctly compiled).
>
> Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
> ---
> libs/vkd3d-shader/hlsl.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
> index 0d9186ae..aafd8acb 100644
> --- a/libs/vkd3d-shader/hlsl.c
> +++ b/libs/vkd3d-shader/hlsl.c
> @@ -1803,10 +1803,10 @@ int hlsl_compile_shader(const struct vkd3d_shader_code *hlsl, const struct vkd3d
> if (!hlsl_ctx_init(&ctx, profile, message_context))
> return VKD3D_ERROR_OUT_OF_MEMORY;
>
> - if (hlsl_lexer_compile(&ctx, hlsl) == 2)
> + if ((ret = hlsl_lexer_compile(&ctx, hlsl)))
> {
> hlsl_ctx_cleanup(&ctx);
> - return VKD3D_ERROR_OUT_OF_MEMORY;
> + return ret == 2 ? VKD3D_ERROR_OUT_OF_MEMORY : VKD3D_ERROR_INVALID_SHADER;
> }
>
> if (ctx.result)
>
We should really be using hlsl_fixme() for such cases (or, in some
cases, not aborting at all). The patch seems like a good idea
regardless, though.
That said, I think we should preserve an existing ctx->result if it's
nonzero. In particular, allocation failure will (and should) print
YYABORT, which causes yyparse() to return 1, not 2, but we do want to
return VKD3D_ERROR_OUT_OF_MEMORY there.
More information about the wine-devel
mailing list