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_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: {
    %f:ptr<function, f32, read_write> = var
    store %f, 1.0f
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %5:ptr<uniform, f32, read> = access %x_6, 0u
        %6:f32 = load %5
        %x_31:f32 = let %6
        %8:f32 = load %f
        %x_32:f32 = let %8
        %10:f32 = add %x_32, %x_31
        store %f, %10
        continue  # -> $B4
      }
      $B4: {  # continuing
        %11:f32 = load %f
        %x_34:f32 = let %11
        %13:ptr<uniform, f32, read> = access %x_6, 0u
        %14:f32 = load %13
        %x_36:f32 = let %14
        %16:f32 = add 9.0f, %x_36
        %17:f32 = clamp %x_34, 8.0f, %16
        %18:bool = gt 10.0f, %17
        %19:bool = eq %18, false
        break_if %19  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %20:f32 = load %f
    %x_40:f32 = let %20
    %22:bool = eq %x_40, 10.0f
    if %22 [t: $B5, f: $B6] {  # if_1
      $B5: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_1
      }
      $B6: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %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.  *
********************************************************************
