#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_1_1;
};
struct tint_symbol_1 {
  float4 x_1_1 [[position]];
};

void main_1(thread uint* const tint_symbol_3) {
  uint const x_2 = *(tint_symbol_3);
  return;
}

main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
  *(tint_symbol_4) = x_4_param;
  main_1(tint_symbol_4);
  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
  return tint_symbol_2;
}

vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
  thread uint tint_symbol_6 = 0u;
  thread float4 tint_symbol_7 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_1_1 = inner_result.x_1_1;
  return wrapper_result;
}

