#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];
};
struct main_out {
  uint x_1_1;
};
struct tint_symbol_1 {
  uint x_1_1 [[sample_mask]];
};

void main_1(thread tint_array_wrapper* const tint_symbol_3) {
  (*(tint_symbol_3)).arr[0] = 0u;
  return;
}

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

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

