SKIP: FAILED

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

%b1 = block {  # 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 {
  %b2 = block {
    ret array<vec4<i32>, 4>(vec4<i32>(0i))
  }
}
%ret_struct_arr = func():S -> %b3 {
  %b3 = block {
    ret S(array<vec4<i32>, 4>(vec4<i32>(0i)))
  }
}
%foo = func(%src_param:array<vec4<i32>, 4>):void -> %b4 {
  %b4 = block {
    %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 {
  %b5 = block {
    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
      %b6 = block {  # initializer
        next_iteration %b7 %tint_local_index
      }
      %b7 = block (%idx:u32) {  # body
        %28:bool = gte %idx:u32, 4u
        if %28 [t: %b9] {  # if_1
          %b9 = block {  # true
            exit_loop  # loop_1
          }
        }
        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx:u32
        store %29, vec4<i32>(0i)
        continue %b8
      }
      %b8 = block {  # continuing
        %30:u32 = add %idx:u32, 1u
        next_iteration %b7 %30
      }
    }
    %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.  *
********************************************************************
