SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(16) {
  modelViewProjectionMatrix:mat4x4<f32> @offset(0)
}

VertexOutput = struct @align(16) {
  vtxFragColor:vec4<f32> @offset(0), @location(0)
  Position:vec4<f32> @offset(16), @builtin(position)
}

VertexInput = struct @align(16) {
  cur_position:vec4<f32> @offset(0), @location(0)
  color:vec4<f32> @offset(16), @location(1)
}

%b1 = block {  # root
  %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 0)
}

%vtx_main = @vertex func(%input:VertexInput):VertexOutput -> %b2 {
  %b2 = block {
    %output:ptr<function, VertexOutput, read_write> = var
    %5:ptr<function, vec4<f32>, read_write> = access %output, 1u
    %6:ptr<uniform, mat4x4<f32>, read> = access %uniforms, 0u
    %7:mat4x4<f32> = load %6
    %8:vec4<f32> = access %input, 0u
    %9:vec4<f32> = mul %7, %8
    store %5, %9
    %10:ptr<function, vec4<f32>, read_write> = access %output, 0u
    %11:vec4<f32> = access %input, 1u
    store %10, %11
    %12:VertexOutput = load %output
    ret %12
  }
}
%frag_main = @fragment func(%fragColor:vec4<f32> [@location(0)]):vec4<f32> [@location(0)] -> %b3 {
  %b3 = block {
    ret %fragColor
  }
}

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.  *
********************************************************************
