type Arr = array<u32, 10u>;

struct S_atomic {
  x : i32,
  a : array<atomic<u32>, 10u>,
  y : u32,
}

struct S {
  x : i32,
  a : Arr,
  y : u32,
}

var<private> local_invocation_index_1 : u32;

var<workgroup> wg : S_atomic;

fn compute_main_inner(local_invocation_index : u32) {
  var idx : u32 = 0u;
  wg.x = 0i;
  wg.y = 0u;
  idx = local_invocation_index;
  loop {
    let x_30 : u32 = idx;
    if (!((x_30 < 10u))) {
      break;
    }
    let x_35 : u32 = idx;
    atomicStore(&(wg.a[x_35]), 0u);

    continuing {
      let x_41 : u32 = idx;
      idx = (x_41 + 1u);
    }
  }
  workgroupBarrier();
  atomicStore(&(wg.a[4i]), 1u);
  return;
}

fn compute_main_1() {
  let x_53 : u32 = local_invocation_index_1;
  compute_main_inner(x_53);
  return;
}

@compute @workgroup_size(1i, 1i, 1i)
fn compute_main(@builtin(local_invocation_index) local_invocation_index_1_param : u32) {
  local_invocation_index_1 = local_invocation_index_1_param;
  compute_main_1();
}
