[pixel shader fail]
struct apple
{
    float3 aa;
    float bb;
};

float4 main() : sv_target
{
    float4 f = {1, 2, 3, 4};
    struct apple a;

    a = f;
    return a.aa.xyzx;
}


[pixel shader fail]
struct apple
{
    float aa;
    float bb;
};

float4 main() : sv_target
{
    struct apple a = {1, 2};
    float2 f;

    f = a;
    return f.xyxy;
}


[pixel shader fail(sm>=6)]
struct apple
{
    float3 aa;
    float bb;
};

float4 main() : sv_target
{
    float f[4] = {1, 2, 3, 4};
    struct apple a;

    a = f;
    return a.aa.xyzx;
}


[test]
draw quad
probe all rgba (1.0, 2.0, 3.0, 1.0)


[pixel shader fail]
struct apple
{
    float3 aa;
    int bb;
};

float4 main() : sv_target
{
    float f[4] = {1, 2, 3, 4};
    struct apple a;

    a = f;
    return a.aa.xyzx;
}


[pixel shader fail(sm>=6)]
struct apple
{
    float3 aa;
    float bb;
};

float4 main() : sv_target
{
    struct apple a = {5, 6, 7, 8};
    float f[4];

    f = a;
    return float4(f);
}


[test]
draw quad
probe all rgba (5.0, 6.0, 7.0, 8.0)


[pixel shader fail(sm>=6)]
Texture2D tex;

struct apple
{
    int2 aa;
    Texture2D bb;
    float cc;
};

struct banana
{
    int aa[2];
    Texture2D bb;
    float cc;
};

float4 main() : sv_target
{
    struct apple a = {1, 2, tex, 4};
    struct banana b;

    b = a;
    return b.cc;
}

[test]
draw quad
probe all rgba (4.0, 4.0, 4.0, 4.0)


[pixel shader fail(sm>=6)]
Texture2D tex;

struct apple
{
    int2 aa;
    Texture2D bb;
    float cc;
};

struct banana
{
    int aa[2];
    Texture2D bb;
    float cc;
};

float4 fun(struct banana b)
{
    return b.cc;
}

float4 main() : sv_target
{
    struct apple a = {1, 2, tex, 5};

    return fun(a);
}

[test]
draw quad
probe all rgba (5.0, 5.0, 5.0, 5.0)


[pixel shader fail(sm>=6)]
struct apple
{
    float3 xx[2];
    int4 yy;
};

struct banana
{
    struct apple apples[2];
    int3 bb[2];
    int4 cc[3];
};

struct cherry
{
    int2 xx;
    int yy[3];
};

struct donut
{
    float4 aa;
    float2 bb;
    int cc[4];
    float dd[6];
    struct cherry cherries[4];
    int2 ee;
};

float4 main() : sv_target
{
    struct banana b = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
            21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37};
    struct donut d;

    d = b;
    return d.aa + d.cherries[3].yy[2] + d.ee.xyxx;
}

[test]
draw quad
probe all rgba (71.0, 73.0, 73.0, 74.0)


[pixel shader fail]
struct apple
{
    float3 aa;
    int bb;
};

struct banana
{
    float3 aa;
    float bb;
};

float4 main() : sv_target
{
    struct apple a = {1, 2, 3, 4};
    struct banana b;

    b = a;
    return b.bb;
}


[pixel shader fail]
float main() : SV_TARGET
{
    float arr[3] = {1, 2, 3};
    float v;

    v = arr;
    return 0;
}


[pixel shader fail]
float main() : SV_TARGET
{
    float2 arr[3] = {1, 2, 3, 4, 5, 6};
    float2 vec;

    vec = arr;
    return 0;
}


[pixel shader fail]
float4 main() : SV_TARGET
{
    int arr1[4] = {1, 2, 3, 4};
    float arr2[4];

    arr2 = arr1;
    return 0;
}


[pixel shader fail]
float4 main() : SV_TARGET
{
    float2x2 mat = {1, 2, 3, 4};
    float3 vec;

    vec = mat;
    return 0;
}


[pixel shader fail]
float4 main() : SV_TARGET
{
    float4 f = {1, 2, 3, 4};
    float arr[4];

    arr = f;
    return 0;
}


[pixel shader fail]
float4 main() : SV_TARGET
{
    float arr[4] = {1, 2, 3, 4};
    float4 f;

    f = arr;
    return 0;
}


[pixel shader fail]
float4 main() : SV_TARGET
{
    float3x2 mat1 = {1, 2, 3, 4, 5, 6};
    float2x3 mat2;

    mat2 = mat1;
    return 0;
}


[pixel shader fail]
struct apple {
    float aa;
};

float4 main() : SV_TARGET
{
    struct apple a = 3.0;

    return 0;
}
