type ArrayType = array<vec4<i32>, 4>;

struct S {
  arr : ArrayType,
}

var<private> src_private : ArrayType;

var<workgroup> src_workgroup : ArrayType;

@group(0) @binding(0) var<uniform> src_uniform : S;

@group(0) @binding(1) var<storage, read_write> src_storage : S;

var<private> dst : ArrayType;

var<private> dst_nested : array<array<array<i32, 2>, 3>, 4>;

fn ret_arr() -> ArrayType {
  return ArrayType();
}

fn ret_struct_arr() -> S {
  return S();
}

fn foo(src_param : ArrayType) {
  var src_function : ArrayType;
  dst = ArrayType(vec4(1), vec4(2), vec4(3), vec4(3));
  dst = src_param;
  dst = ret_arr();
  let src_let : ArrayType = ArrayType();
  dst = src_let;
  dst = src_function;
  dst = src_private;
  dst = src_workgroup;
  dst = ret_struct_arr().arr;
  dst = src_uniform.arr;
  dst = src_storage.arr;
  var src_nested : array<array<array<i32, 2>, 3>, 4>;
  dst_nested = src_nested;
}
