#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  uint arr[1];
};
struct tint_array_wrapper_1 {
  uint arr[2];
};
struct tint_array_wrapper_2 {
  int arr[1];
};
struct tint_array_wrapper_3 {
  int arr[2];
};

void main_1(thread tint_array_wrapper* const tint_symbol_1) {
  uint const x_3 = (*(tint_symbol_1)).arr[0];
  return;
}

void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
  (*(tint_symbol_2)).arr[0] = x_1_param;
  main_1(tint_symbol_2);
}

fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
  thread tint_array_wrapper tint_symbol_3 = {};
  tint_symbol_inner(x_1_param, &(tint_symbol_3));
  return;
}

