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)
  %dst:ptr<workgroup, array<vec4<i32>, 4>, read_write> = var
  %dst_nested:ptr<workgroup, array<array<array<i32, 2>, 3>, 4>, read_write> = var
}

%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
    store %dst, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
    store %dst, %src_param
    %12:array<vec4<i32>, 4> = call %ret_arr
    store %dst, %12
    %src_let:array<vec4<i32>, 4> = let array<vec4<i32>, 4>(vec4<i32>(0i))
    store %dst, %src_let
    %14:array<vec4<i32>, 4> = load %src_function
    store %dst, %14
    %15:array<vec4<i32>, 4> = load %src_private
    store %dst, %15
    %16:array<vec4<i32>, 4> = load %src_workgroup
    store %dst, %16
    %17:S = call %ret_struct_arr
    %18:array<vec4<i32>, 4> = access %17, 0u
    store %dst, %18
    %19:ptr<uniform, array<vec4<i32>, 4>, read> = access %src_uniform, 0u
    %20:array<vec4<i32>, 4> = load %19
    store %dst, %20
    %21:ptr<storage, array<vec4<i32>, 4>, read_write> = access %src_storage, 0u
    %22:array<vec4<i32>, 4> = load %21
    store %dst, %22
    %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)
        %30:ptr<workgroup, vec4<i32>, read_write> = access %dst, %idx
        store %30, vec4<i32>(0i)
        continue  # -> $B8
      }
      $B8: {  # continuing
        %31:u32 = add %idx, 1u
        next_iteration %31  # -> $B7
      }
    }
    loop [i: $B10, b: $B11, c: $B12] {  # loop_2
      $B10: {  # initializer
        next_iteration %tint_local_index  # -> $B11
      }
      $B11 (%idx_1:u32): {  # body
        %33:bool = gte %idx_1, 24u
        if %33 [t: $B13] {  # if_2
          $B13: {  # true
            exit_loop  # loop_2
          }
        }
        %34:u32 = mod %idx_1, 2u
        %35:u32 = div %idx_1, 2u
        %36:u32 = mod %35, 3u
        %37:u32 = div %idx_1, 6u
        %38:ptr<workgroup, i32, read_write> = access %dst_nested, %37, %36, %34
        store %38, 0i
        continue  # -> $B12
      }
      $B12: {  # continuing
        %39:u32 = add %idx_1, 1u
        next_iteration %39  # -> $B11
      }
    }
    %40:void = msl.threadgroup_barrier 4u
    %val:array<vec4<i32>, 4> = let array<vec4<i32>, 4>(vec4<i32>(0i))
    %42: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.  *
********************************************************************
