SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  zeroOne:vec2<f32> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %v:ptr<function, vec2<f32>, read_write> = var
    %d:ptr<function, f32, read_write> = var
    %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %7:vec2<f32> = load %6
    %x_37:vec2<f32> = let %7
    %9:vec2<f32> = mix vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), %x_37
    store %v, %9
    %10:vec2<f32> = load %v
    %x_39:vec2<f32> = let %10
    %12:f32 = distance %x_39, vec2<f32>(2.0f, 5.0f)
    store %d, %12
    %13:f32 = load %d
    %x_41:f32 = let %13
    %15:bool = lt %x_41, 0.10000000149011611938f
    if %15 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %16:f32 = load_vector_element %v, 0u
        %x_47:f32 = let %16
        %18:f32 = load_vector_element %v, 1u
        %x_50:f32 = let %18
        %20:f32 = sub %x_47, 1.0f
        %21:f32 = sub %x_50, 5.0f
        %22:vec4<f32> = construct %20, %21, 0.0f, 1.0f
        store %x_GLF_color, %22
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    ret %26
  }
}

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