#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 int* const tint_symbol_3) {
  int const x_2 = *(tint_symbol_3);
  return;
}

main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
  *(tint_symbol_4) = as_type<int>(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 [[instance_id]]) {
  thread int tint_symbol_6 = 0;
  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;
}

