#include <metal_stdlib>

using namespace metal;
struct UBO {
  /* 0x0000 */ int dynamic_idx;
};
struct tint_array_wrapper {
  int arr[64];
};
struct S {
  tint_array_wrapper data;
};
struct Result {
  /* 0x0000 */ int out;
};

void f_inner(constant UBO& ubo, device Result& result, uint local_invocation_index, threadgroup S* const tint_symbol) {
  for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
    uint const i = idx;
    (*(tint_symbol)).data.arr[i] = int();
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  result.out = (*(tint_symbol)).data.arr[ubo.dynamic_idx];
}

kernel void f(uint local_invocation_index [[thread_index_in_threadgroup]], constant UBO& ubo [[buffer(0)]], device Result& result [[buffer(1)]]) {
  threadgroup S tint_symbol_1;
  f_inner(ubo, result, local_invocation_index, &(tint_symbol_1));
  return;
}

