SKIP: FAILED

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

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

$B1: {  # root
  %g:ptr<private, i32, read_write> = var
  %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: {
    %a:ptr<function, i32, read_write> = var
    store %g, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:i32 = load %g
        %x_8:i32 = let %6
        %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %9:f32 = load_vector_element %8, 0u
        %x_46:f32 = let %9
        %11:f32 = add %x_46, 2.0f
        %12:i32 = call %tint_f32_to_i32, %11
        %14:bool = lt %x_8, %12
        if %14 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %15:i32 = load %g
        %x_9:i32 = let %15
        %17:i32 = add %x_9, 1i
        store %g, %17
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %18:i32 = load %g
    %x_11:i32 = let %18
    store %a, %x_11
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %20:i32 = load %g
        %x_12:i32 = let %20
        %22:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %23:f32 = load_vector_element %22, 1u
        %x_56:f32 = let %23
        %25:i32 = call %tint_f32_to_i32, %x_56
        %26:bool = lt %x_12, %25
        if %26 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %27:i32 = load %g
        %x_13:i32 = let %27
        %29:i32 = add %x_13, 1i
        store %g, %29
        continue  # -> $B8
      }
      $B8: {  # continuing
        next_iteration  # -> $B7
      }
    }
    %30:i32 = load %a
    %x_15:i32 = let %30
    store %a, %x_15
    %32:i32 = load %a
    %x_16:i32 = let %32
    %34:bool = eq %x_16, 2i
    if %34 [t: $B11, f: $B12] {  # if_3
      $B11: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      $B12: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %36:void = call %main_1
    %37:vec4<f32> = load %x_GLF_color
    %38:main_out = construct %37
    ret %38
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B14: {
    %40:i32 = convert %value
    %41:bool = gte %value, -2147483648.0f
    %42:i32 = select -2147483648i, %40, %41
    %43:bool = lte %value, 2147483520.0f
    %44:i32 = select 2147483647i, %42, %43
    ret %44
  }
}

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