1cb93a386Sopenharmony_ci
2cb93a386Sopenharmony_ciout vec4 sk_FragColor;
3cb93a386Sopenharmony_ciuniform vec4 colorRed;
4cb93a386Sopenharmony_ciuniform vec4 colorGreen;
5cb93a386Sopenharmony_cistruct S {
6cb93a386Sopenharmony_ci    float x;
7cb93a386Sopenharmony_ci    int y;
8cb93a386Sopenharmony_ci};
9cb93a386Sopenharmony_cistruct Nested {
10cb93a386Sopenharmony_ci    S a;
11cb93a386Sopenharmony_ci    S b;
12cb93a386Sopenharmony_ci};
13cb93a386Sopenharmony_cistruct Compound {
14cb93a386Sopenharmony_ci    vec4 f4;
15cb93a386Sopenharmony_ci    ivec3 i3;
16cb93a386Sopenharmony_ci};
17cb93a386Sopenharmony_ciS returns_a_struct_S() {
18cb93a386Sopenharmony_ci    S s;
19cb93a386Sopenharmony_ci    s.x = 1.0;
20cb93a386Sopenharmony_ci    s.y = 2;
21cb93a386Sopenharmony_ci    return s;
22cb93a386Sopenharmony_ci}
23cb93a386Sopenharmony_ciS constructs_a_struct_S() {
24cb93a386Sopenharmony_ci    return S(2.0, 3);
25cb93a386Sopenharmony_ci}
26cb93a386Sopenharmony_cifloat accepts_a_struct_fS(S s) {
27cb93a386Sopenharmony_ci    return s.x + float(s.y);
28cb93a386Sopenharmony_ci}
29cb93a386Sopenharmony_civoid modifies_a_struct_vS(inout S s) {
30cb93a386Sopenharmony_ci    s.x++;
31cb93a386Sopenharmony_ci    s.y++;
32cb93a386Sopenharmony_ci}
33cb93a386Sopenharmony_civec4 main() {
34cb93a386Sopenharmony_ci    S s = returns_a_struct_S();
35cb93a386Sopenharmony_ci    float x = accepts_a_struct_fS(s);
36cb93a386Sopenharmony_ci    modifies_a_struct_vS(s);
37cb93a386Sopenharmony_ci    S expected = constructs_a_struct_S();
38cb93a386Sopenharmony_ci    Nested n1;
39cb93a386Sopenharmony_ci    Nested n2;
40cb93a386Sopenharmony_ci    Nested n3;
41cb93a386Sopenharmony_ci    n1.a = returns_a_struct_S();
42cb93a386Sopenharmony_ci    n1.b = n1.a;
43cb93a386Sopenharmony_ci    n2 = n1;
44cb93a386Sopenharmony_ci    n3 = n2;
45cb93a386Sopenharmony_ci    modifies_a_struct_vS(n3.b);
46cb93a386Sopenharmony_ci    Compound c1 = Compound(vec4(1.0, 2.0, 3.0, 4.0), ivec3(5, 6, 7));
47cb93a386Sopenharmony_ci    Compound c2 = Compound(vec4(colorGreen.y, 2.0, 3.0, 4.0), ivec3(5, 6, 7));
48cb93a386Sopenharmony_ci    Compound c3 = Compound(vec4(colorGreen.x, 2.0, 3.0, 4.0), ivec3(5, 6, 7));
49cb93a386Sopenharmony_ci    bool valid = (((((((((x == 3.0 && s.x == 2.0) && s.y == 3) && s == expected) && s == S(2.0, 3)) && s != returns_a_struct_S()) && n1 == n2) && n1 != n3) && n3 == Nested(S(1.0, 2), S(2.0, 3))) && c1 == c2) && c2 != c3;
50cb93a386Sopenharmony_ci    return valid ? colorGreen : colorRed;
51cb93a386Sopenharmony_ci}
52