#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct S {
    float x;
    int y;
};
struct Uniforms {
    float4 colorRed;
    float4 colorGreen;
};
struct Inputs {
};
struct Outputs {
    float4 sk_FragColor [[color(0)]];
};
void modifies_a_struct(thread S& s);
void _skOutParamHelper0_modifies_a_struct(thread S& s) {
    S _var0 = s;
    modifies_a_struct(_var0);
    s = _var0;
}


S returns_a_struct() {
    S s;
    s.x = 1.0;
    s.y = 2;
    return s;
}
float accepts_a_struct(S s) {
    return s.x + float(s.y);
}
void modifies_a_struct(thread S& s) {
    s.x++;
    s.y++;
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
    Outputs _out;
    (void)_out;
    S s = returns_a_struct();
    float x = accepts_a_struct(s);
    _skOutParamHelper0_modifies_a_struct(s);
    bool valid = (x == 3.0 && s.x == 2.0) && s.y == 3;
    _out.sk_FragColor = valid ? _uniforms.colorGreen : _uniforms.colorRed;
    return _out;
}
