#include <metal_stdlib>

using namespace metal;
struct main_out {
  uint x_2_1;
  uint x_4_1;
};
struct tint_symbol_2 {
  uint x_1_param [[user(locn0)]];
  uint x_3_param [[user(locn30)]];
};
struct tint_symbol_3 {
  uint x_2_1 [[color(0)]];
  uint x_4_1 [[color(6)]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(uint x_1_param, uint x_3_param, thread uint* const tint_symbol_5, thread uint* const tint_symbol_6, thread uint* const tint_symbol_7, thread uint* const tint_symbol_8) {
  *(tint_symbol_5) = x_1_param;
  *(tint_symbol_6) = x_3_param;
  main_1();
  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_7), .x_4_1=*(tint_symbol_8)};
  return tint_symbol_4;
}

fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread uint tint_symbol_9 = 0u;
  thread uint tint_symbol_10 = 0u;
  thread uint tint_symbol_11 = 0u;
  thread uint tint_symbol_12 = 0u;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_3_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.x_2_1 = inner_result.x_2_1;
  wrapper_result.x_4_1 = inner_result.x_4_1;
  return wrapper_result;
}

