#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

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

void fract_ed00ca() {
  float2 res = float2(0.25f);
}

fragment void fragment_main() {
  fract_ed00ca();
}

kernel void compute_main() {
  fract_ed00ca();
}

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

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