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
        %7:i32 = let %6
        %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %9:f32 = load_vector_element %8, 0u
        %10:f32 = add %9, 2.0f
        %11:i32 = call %tint_f32_to_i32, %10
        %13:bool = lt %7, %11
        if %13 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %14:i32 = load %g
        %15:i32 = add %14, 1i
        store %g, %15
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %16:i32 = load %g
    store %a, %16
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %17:i32 = load %g
        %18:i32 = let %17
        %19:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %20:f32 = load_vector_element %19, 1u
        %21:i32 = call %tint_f32_to_i32, %20
        %22:bool = lt %18, %21
        if %22 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %23:i32 = load %g
        %24:i32 = add %23, 1i
        store %g, %24
        continue  # -> $B8
      }
      $B8: {  # continuing
        next_iteration  # -> $B7
      }
    }
    %25:i32 = load %a
    store %a, %25
    %26:i32 = load %a
    %27:bool = eq %26, 2i
    if %27 [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: {
    %29:void = call %main_1
    %30:vec4<f32> = load %x_GLF_color
    %31:main_out = construct %30
    ret %31
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B14: {
    %33:i32 = convert %value
    %34:bool = gte %value, -2147483648.0f
    %35:i32 = select -2147483648i, %33, %34
    %36:bool = lte %value, 2147483520.0f
    %37:i32 = select 2147483647i, %35, %36
    ret %37
  }
}

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