SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_31:f32 = load %6
    %8:vec4<f32> = construct %x_31, 0.0f, 0.0f, 0.0f
    %9:vec4<f32> = construct 0.0f, %x_31, 0.0f, 0.0f
    %10:vec4<f32> = construct 0.0f, 0.0f, %x_31, 0.0f
    %11:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_31
    %12:mat4x4<f32> = construct %8, %9, %10, %11
    %13:vec4<f32> = load %v
    %14:vec4<f32> = mul %12, %13
    store %res, %14
    %15:vec4<f32> = load %v
    %16:vec4<f32> = load %res
    %17:f32 = distance %15, %16
    %18:bool = lt %17, 0.00999999977648258209f
    if %18 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_1
      }
      %b4 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %20:void = call %main_1
    %21:vec4<f32> = load %x_GLF_color
    %22:main_out = construct %21
    ret %22
  }
}

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