fn f1(a : array<f32, 4>) -> f32 {
  return a[3];
}

fn f2(a : array<array<f32, 4>, 3>) -> f32 {
  return a[2][3];
}

fn f3(a : array<array<array<f32, 4>, 3>, 2>) -> f32 {
  return a[1][2][3];
}

@compute @workgroup_size(1)
fn main() {
  let a1 : array<f32, 4> = array<f32, 4>();
  let a2 : array<array<f32, 4>, 3> = array<array<f32, 4>, 3>();
  let a3 : array<array<array<f32, 4>, 3>, 2> = array<array<array<f32, 4>, 3>, 2>();
  let v1 : f32 = f1(a1);
  let v2 : f32 = f2(a2);
  let v3 : f32 = f3(a3);
}