type ArrayType = @stride(16) array; struct S { arr : ArrayType; }; var src_private : ArrayType; var src_workgroup : ArrayType; @group(0) @binding(0) var src_uniform : S; @group(0) @binding(1) var src_storage : S; var dst : ArrayType; var dst_nested : array, 3>, 4>; fn ret_arr() -> ArrayType { return ArrayType(); } fn ret_struct_arr() -> S { return S(); } fn foo(src_param : ArrayType) { var src_function : ArrayType; // Assign from type constructor. dst = ArrayType(1, 2, 3, 3); // Assign from parameter. dst = src_param; // Assign from function call. dst = ret_arr(); // Assign from constant. let src_let : ArrayType = ArrayType(); dst = src_let; // Assign from var, various storage classes. dst = src_function; dst = src_private; dst = src_workgroup; // Assign from struct.arr, various storage classes. dst = ret_struct_arr().arr; dst = src_uniform.arr; dst = src_storage.arr; // Nested assignment. var src_nested : array, 3>, 4>; dst_nested = src_nested; }