SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
  %prevent_dce:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(2, 0)
}

%transpose_b9ad1f = func():void {
  $B2: {
    %arg_0:ptr<function, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(1.0h))
    %4:mat3x2<f16> = load %arg_0
    %5:mat2x3<f16> = transpose %4
    %res:ptr<function, mat2x3<f16>, read_write> = var, %5
    %7:mat2x3<f16> = load %res
    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
    ret
  }
}
%vertex_main = @vertex func():vec4<f32> [@position] {
  $B3: {
    %11:void = call %transpose_b9ad1f
    ret vec4<f32>(0.0f)
  }
}
%fragment_main = @fragment func():void {
  $B4: {
    %13:void = call %transpose_b9ad1f
    ret
  }
}
%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
  $B5: {
    %15:void = call %transpose_b9ad1f
    ret
  }
}
%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
  $B6: {
    %18:ptr<storage, vec3<f16>, read_write> = access %target, 0u
    %19:vec3<f16> = access %value_param, 0u
    store %18, %19
    %20:ptr<storage, vec3<f16>, read_write> = access %target, 1u
    %21:vec3<f16> = access %value_param, 1u
    store %20, %21
    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.  *
********************************************************************
