SKIP: FAILED

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

%transpose_d8f8ba = func():void {
  $B2: {
    %arg_0:ptr<function, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(1.0f))
    %4:mat3x4<f32> = load %arg_0
    %5:mat4x3<f32> = transpose %4
    %res:ptr<function, mat4x3<f32>, read_write> = var, %5
    %7:mat4x3<f32> = 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_d8f8ba
    ret vec4<f32>(0.0f)
  }
}
%fragment_main = @fragment func():void {
  $B4: {
    %13:void = call %transpose_d8f8ba
    ret
  }
}
%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
  $B5: {
    %15:void = call %transpose_d8f8ba
    ret
  }
}
%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
  $B6: {
    %18:ptr<storage, vec3<f32>, read_write> = access %target, 0u
    %19:vec3<f32> = access %value_param, 0u
    store %18, %19
    %20:ptr<storage, vec3<f32>, read_write> = access %target, 1u
    %21:vec3<f32> = access %value_param, 1u
    store %20, %21
    %22:ptr<storage, vec3<f32>, read_write> = access %target, 2u
    %23:vec3<f32> = access %value_param, 2u
    store %22, %23
    %24:ptr<storage, vec3<f32>, read_write> = access %target, 3u
    %25:vec3<f32> = access %value_param, 3u
    store %24, %25
    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.  *
********************************************************************
