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

%main_1 = func():void {
  $B2: {
    %j:ptr<function, i32, read_write> = var
    %x_41:ptr<function, f32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %7:f32 = load_vector_element %6, 0u
        %8:i32 = call %tint_f32_to_i32, %7
        store %j, %8
        loop [b: $B5] {  # loop_2
          $B5: {  # body
            %10:i32 = load %j
            %11:bool = lt %10, 2i
            if %11 [t: $B6, f: $B7] {  # if_1
              $B6: {  # true
                exit_if  # if_1
              }
              $B7: {  # false
                exit_loop  # loop_2
              }
            }
            ret
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %12:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %13:f32 = load_vector_element %12, 1u
        store %x_41, %13
        %14:f32 = load %x_41
        %15:bool = gt 0.0f, %14
        %16:bool = eq %15, false
        break_if %16  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %17:f32 = load %x_41
    %18:i32 = call %tint_f32_to_i32, %17
    %x_43:i32 = let %18
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %21:void = call %main_1
    %22:vec4<f32> = load %x_GLF_color
    %23:main_out = construct %22
    ret %23
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B9: {
    %25:i32 = convert %value
    %26:bool = gte %value, -2147483648.0f
    %27:i32 = select -2147483648i, %25, %26
    %28:bool = lte %value, 2147483520.0f
    %29:i32 = select 2147483647i, %27, %28
    ret %29
  }
}

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