#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  uint arr[1];
};
struct main_out {
  uint x_1_1;
};
struct tint_symbol_1 {
  uint x_1_1 [[sample_mask]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_3) {
  main_1();
  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).arr[0]};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol() {
  thread tint_array_wrapper tint_symbol_4 = {.arr={0u}};
  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_1_1 = inner_result.x_1_1;
  return wrapper_result;
}

