[PATCH vkd3d 4/8] tests: Add additional subtests to implicit array initialization.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Tue May 3 12:57:46 CDT 2022
As long as there's outstanding criticism, I'll add a couple of extra notes:
On 5/3/22 04:57, Giovanni Mascellani wrote:
> +[pixel shader fail]
> +// Implicit size array as function return type
> +// Note: explicit size arrays are not allowed either.
> +float4[] merge(float4 a, float4 b)
> +{
> + float4 ret[2];
> + ret[0] = a;
> + ret[1] = b;
> + return ret;
> +}
> +float4 main() : sv_target
> +{
> + float4 a = float4(1, 2, 3, 4);
> + float4 b = float4(5, 6, 7, 8);
> + return merge(a, b)[0];
> +}
Out of scope of this patch perhaps, but that'd be another good thing to
add explicit tests for. Frankly, if we had tests for explicitly sized
arrays as function return types, I'd say that tests for implicitly sized
arrays are superfluous.
As a side note, it's not necessarily obvious that that's the right place
to put the brackets. In C, for example, the "right" place is after the
close paren (it's still illegal, but it at least parses). It turns out
that HLSL doesn't accept them anywhere.
> +
> +[pixel shader fail]
> +// Implicit size array as a typedef
> +float4 main() : sv_target
> +{
> + float2 arr1[4] = {1, 2, 3, 4, 5, 6, 7, 8};
> + float4 arr2[2] = (float2 []) arr1;
> + return arr2[1];
> +}
As Giovanni pointed out, that's a cast, not a typedef. Adding one for a
typedef would be welcome, though :-)
> +[pixel shader fail]
> +// Implicit array of elements of size 0 with broadcast initialization
> +struct emp {
> +};
> +
> +float4 main() : sv_target
> +{
> + struct emp p[] = 42;
> +
> + return float4(1, 2, 3, 4);
> +}
Indeed, although it turns out that the offending condition here is
actually "initializing an array variable without braces and without an
explicit cast", which is rather simpler. More interesting is that
int a[4] = (int[])0;
is invalid.
More information about the wine-devel
mailing list