#include <metal_stdlib>

using namespace metal;
struct str {
  int i;
};

void tint_zero_workgroup_memory(uint local_idx, threadgroup str* const tint_symbol_2) {
  if ((local_idx < 1u)) {
    str const tint_symbol_1 = str{};
    *(tint_symbol_2) = tint_symbol_1;
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
}

int func(threadgroup int* const pointer) {
  return *(pointer);
}

void tint_symbol_inner(uint local_invocation_index, threadgroup str* const tint_symbol_3) {
  tint_zero_workgroup_memory(local_invocation_index, tint_symbol_3);
  int const r = func(&((*(tint_symbol_3)).i));
}

kernel void tint_symbol(uint local_invocation_index [[thread_index_in_threadgroup]]) {
  threadgroup str tint_symbol_4;
  tint_symbol_inner(local_invocation_index, &(tint_symbol_4));
  return;
}

