#include #include 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; }