#include <metal_stdlib>
using namespace metal;

struct modf_result_f32 {
  float fract;
  float whole;
};

struct VertexOutput {
  float4 pos;
};

struct vertex_main_outputs {
  float4 VertexOutput_pos [[position]];
};

void modf_c15f48() {
  modf_result_f32 res = modf_result_f32{.fract=-0.5f, .whole=-1.0f};
}

fragment void fragment_main() {
  modf_c15f48();
}

kernel void compute_main() {
  modf_c15f48();
}

VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  modf_c15f48();
  return out;
}

vertex vertex_main_outputs vertex_main() {
  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
}
