SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
  arr:array<vec4<i32>, 4> @offset(0)
}

$B1: {  # root
  %src_private:ptr<private, array<vec4<i32>, 4>, read_write> = var
  %src_workgroup:ptr<workgroup, array<vec4<i32>, 4>, read_write> = var
  %src_uniform:ptr<uniform, S, read> = var @binding_point(0, 0)
  %src_storage:ptr<storage, S, read_write> = var @binding_point(0, 1)
}

%ret_arr = func():array<vec4<i32>, 4> {
  $B2: {
    ret array<vec4<i32>, 4>(vec4<i32>(0i))
  }
}
%ret_struct_arr = func():S {
  $B3: {
    ret S(array<vec4<i32>, 4>(vec4<i32>(0i)))
  }
}
%foo = func(%src_param:array<vec4<i32>, 4>):void {
  $B4: {
    %src_function:ptr<function, array<vec4<i32>, 4>, read_write> = var
    %dst:ptr<function, array<vec4<i32>, 4>, read_write> = var
    store %dst, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
    store %dst, %src_param
    %11:array<vec4<i32>, 4> = call %ret_arr
    store %dst, %11
    %src_let:array<vec4<i32>, 4> = let array<vec4<i32>, 4>(vec4<i32>(0i))
    store %dst, %src_let
    %13:array<vec4<i32>, 4> = load %src_function
    store %dst, %13
    %14:array<vec4<i32>, 4> = load %src_private
    store %dst, %14
    %15:array<vec4<i32>, 4> = load %src_workgroup
    store %dst, %15
    %16:S = call %ret_struct_arr
    %17:array<vec4<i32>, 4> = access %16, 0u
    store %dst, %17
    %18:ptr<uniform, array<vec4<i32>, 4>, read> = access %src_uniform, 0u
    %19:array<vec4<i32>, 4> = load %18
    store %dst, %19
    %20:ptr<storage, array<vec4<i32>, 4>, read_write> = access %src_storage, 0u
    %21:array<vec4<i32>, 4> = load %20
    store %dst, %21
    %dst_nested:ptr<function, array<array<array<i32, 2>, 3>, 4>, read_write> = var
    %src_nested:ptr<function, array<array<array<i32, 2>, 3>, 4>, read_write> = var
    %24:array<array<array<i32, 2>, 3>, 4> = load %src_nested
    store %dst_nested, %24
    ret
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
  $B5: {
    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
      $B6: {  # initializer
        next_iteration %tint_local_index  # -> $B7
      }
      $B7 (%idx:u32): {  # body
        %28:bool = gte %idx, 4u
        if %28 [t: $B9] {  # if_1
          $B9: {  # true
            exit_loop  # loop_1
          }
        }
        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx
        store %29, vec4<i32>(0i)
        continue  # -> $B8
      }
      $B8: {  # continuing
        %30:u32 = add %idx, 1u
        next_iteration %30  # -> $B7
      }
    }
    %31:void = msl.threadgroup_barrier 4u
    %val:array<vec4<i32>, 4> = let array<vec4<i32>, 4>(vec4<i32>(0i))
    %33:void = call %foo, %val
    ret
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
