SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  one:f32 @offset(0)
}

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

$B1: {  # root
  %x_7: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, vec4<f32>, read_write> = var
    %res:ptr<function, vec4<f32>, read_write> = var
    store %v, vec4<f32>(8.3999996185302734375f, -864.66497802734375f, 945.41998291015625f, 1.0f)
    %6:ptr<uniform, f32, read> = access %x_7, 0u
    %7:f32 = load %6
    %x_31:f32 = let %7
    %9:vec4<f32> = load %v
    %x_37:vec4<f32> = let %9
    %11:vec4<f32> = construct %x_31, 0.0f, 0.0f, 0.0f
    %12:vec4<f32> = let %11
    %13:vec4<f32> = construct 0.0f, %x_31, 0.0f, 0.0f
    %14:vec4<f32> = let %13
    %15:vec4<f32> = construct 0.0f, 0.0f, %x_31, 0.0f
    %16:vec4<f32> = let %15
    %17:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_31
    %18:mat4x4<f32> = construct %12, %14, %16, %17
    %19:vec4<f32> = mul %18, %x_37
    store %res, %19
    %20:vec4<f32> = load %v
    %x_39:vec4<f32> = let %20
    %22:vec4<f32> = load %res
    %x_40:vec4<f32> = let %22
    %24:f32 = distance %x_39, %x_40
    %25:bool = lt %24, 0.00999999977648258209f
    if %25 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        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: {
    %27:void = call %main_1
    %28:vec4<f32> = load %x_GLF_color
    %29:main_out = construct %28
    ret %29
  }
}

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