#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  threadgroup float4* S;
};

struct tint_symbol_2 {
  float4 tint_symbol_1;
};

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

void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
  if ((tint_local_index == 0u)) {
    (*tint_module_vars.S) = float4(0.0f);
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  float4 const r = func(tint_module_vars.S);
}

kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_2* v [[threadgroup(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.S=(&(*v).tint_symbol_1)};
  tint_symbol_inner(tint_local_index, tint_module_vars);
}
