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_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void {
  $B2: {
    %x_30:ptr<function, bool, read_write> = var
    %x_31:ptr<function, bool, read_write> = var
    store %x_GLF_color, vec4<f32>(0.0f)
    %6:ptr<uniform, f32, read> = access %x_5, 0u
    %7:f32 = load %6
    %8:bool = lt %7, 0.0f
    %x_24:bool = let %8
    store %x_31, %x_24
    %10:bool = eq %x_24, false
    if %10 [t: $B3] {  # if_1
      $B3: {  # true
        %11:ptr<uniform, f32, read> = access %x_5, 0u
        %12:f32 = load %11
        %13:bool = lt %12, 1.0f
        store %x_30, %13
        %14:bool = load %x_30
        store %x_31, %14
        exit_if  # if_1
      }
    }
    %15:bool = load %x_31
    if %15 [t: $B4] {  # if_2
      $B4: {  # true
        ret
      }
    }
    %16:ptr<uniform, f32, read> = access %x_5, 0u
    %17:f32 = load %16
    %18:bool = lt %17, 0.0f
    if %18 [t: $B5, f: $B6] {  # if_3
      $B5: {  # true
        loop [b: $B7] {  # loop_1
          $B7: {  # body
            %19:ptr<uniform, f32, read> = access %x_5, 0u
            %20:f32 = load %19
            %21:bool = lt %20, 0.0f
            if %21 [t: $B8, f: $B9] {  # if_4
              $B8: {  # true
                exit_if  # if_4
              }
              $B9: {  # false
                exit_loop  # loop_1
              }
            }
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_loop  # loop_1
          }
        }
        exit_if  # if_3
      }
      $B6: {  # false
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    ret %25
  }
}

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