#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int4 arr[4];
};

struct S {
  tint_array_wrapper a;
};

int foo(thread int* const tint_symbol_4) {
  *(tint_symbol_4) = as_type<int>((as_type<uint>(*(tint_symbol_4)) + as_type<uint>(1)));
  return *(tint_symbol_4);
}

int bar(thread int* const tint_symbol_5) {
  *(tint_symbol_5) = as_type<int>((as_type<uint>(*(tint_symbol_5)) + as_type<uint>(2)));
  return *(tint_symbol_5);
}

void tint_symbol(thread int* const tint_symbol_6) {
  S x = {};
  int const tint_symbol_3 = foo(tint_symbol_6);
  int const tint_symbol_1_save = tint_symbol_3;
  int const tint_symbol_2 = bar(tint_symbol_6);
  x.a.arr[tint_symbol_1_save][tint_symbol_2] = as_type<int>((as_type<uint>(x.a.arr[tint_symbol_1_save][tint_symbol_2]) + as_type<uint>(5)));
}

