#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

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

void fract_7e3f2d() {
  float4 res = float4(0.25f);
}

fragment void fragment_main() {
  fract_7e3f2d();
}

kernel void compute_main() {
  fract_7e3f2d();
}

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

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