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)
}

S_nested = struct @align(4) {
  arr:array<array<array<i32, 2>, 3>, 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)
  %dst:ptr<storage, S, read_write> = var @binding_point(0, 2)
  %dst_nested:ptr<storage, S_nested, read_write> = var @binding_point(0, 3)
}

%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
    %12:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    store %12, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
    %13:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    store %13, %src_param
    %14:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %15:array<vec4<i32>, 4> = call %ret_arr
    store %14, %15
    %src_let:array<vec4<i32>, 4> = let array<vec4<i32>, 4>(vec4<i32>(0i))
    %17:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    store %17, %src_let
    %18:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %19:array<vec4<i32>, 4> = load %src_function
    store %18, %19
    %20:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %21:array<vec4<i32>, 4> = load %src_private
    store %20, %21
    %22:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %23:array<vec4<i32>, 4> = load %src_workgroup
    store %22, %23
    %24:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %25:S = call %ret_struct_arr
    %26:array<vec4<i32>, 4> = access %25, 0u
    store %24, %26
    %27:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %28:ptr<uniform, array<vec4<i32>, 4>, read> = access %src_uniform, 0u
    %29:array<vec4<i32>, 4> = load %28
    store %27, %29
    %30:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
    %31:ptr<storage, array<vec4<i32>, 4>, read_write> = access %src_storage, 0u
    %32:array<vec4<i32>, 4> = load %31
    store %30, %32
    %src_nested:ptr<function, array<array<array<i32, 2>, 3>, 4>, read_write> = var
    %34:ptr<storage, array<array<array<i32, 2>, 3>, 4>, read_write> = access %dst_nested, 0u
    %35:array<array<array<i32, 2>, 3>, 4> = load %src_nested
    store %34, %35
    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
        %39:bool = gte %idx, 4u
        if %39 [t: $B9] {  # if_1
          $B9: {  # true
            exit_loop  # loop_1
          }
        }
        %40:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx
        store %40, vec4<i32>(0i)
        continue  # -> $B8
      }
      $B8: {  # continuing
        %41:u32 = add %idx, 1u
        next_iteration %41  # -> $B7
      }
    }
    %42:void = msl.threadgroup_barrier 4u
    %ary:array<vec4<i32>, 4> = let array<vec4<i32>, 4>(vec4<i32>(0i))
    %44:void = call %foo, %ary
    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.  *
********************************************************************
