SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 2> @offset(0)
}

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

$B1: {  # root
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_7: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
    %i:ptr<function, i32, read_write> = var
    %7:f32 = load_vector_element %gl_FragCoord, 0u
    %x_32:f32 = let %7
    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %10:i32 = load %9
    %x_35:i32 = let %10
    %12:i32 = call %tint_f32_to_i32, %x_32
    %14:bool = lt %12, %x_35
    %15:i32 = select -1i, 0i, %14
    store %a, %15
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %16:i32 = load %i
        %x_42:i32 = let %16
        %18:bool = lt %x_42, 5i
        if %18 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %19:i32 = load %a
        %x_45:i32 = let %19
        %21:i32 = call %tint_div_i32, %x_45, 2i
        store %a, %21
        continue  # -> $B4
      }
      $B4: {  # continuing
        %23:i32 = load %i
        %x_47:i32 = let %23
        %25:i32 = add %x_47, 1i
        store %i, %25
        next_iteration  # -> $B3
      }
    }
    %26:i32 = load %a
    %x_49:i32 = let %26
    %28:bool = eq %x_49, 0i
    if %28 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %30:i32 = load %29
        %x_55:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %33:i32 = load %32
        %x_58:i32 = let %33
        %35:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %36:i32 = load %35
        %x_61:i32 = let %36
        %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %39:i32 = load %38
        %x_64:i32 = let %39
        %41:f32 = convert %x_55
        %42:f32 = let %41
        %43:f32 = convert %x_58
        %44:f32 = let %43
        %45:f32 = convert %x_61
        %46:f32 = let %45
        %47:f32 = convert %x_64
        %48:vec4<f32> = construct %42, %44, %46, %47
        store %x_GLF_color, %48
        exit_if  # if_2
      }
      $B8: {  # false
        %49:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %50:i32 = load %49
        %x_68:i32 = let %50
        %52:f32 = convert %x_68
        %x_69:f32 = let %52
        %54:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
        store %x_GLF_color, %54
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B9: {
    store %gl_FragCoord, %gl_FragCoord_param
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B10: {
    %62:bool = eq %rhs, 0i
    %63:bool = eq %lhs, -2147483648i
    %64:bool = eq %rhs, -1i
    %65:bool = and %63, %64
    %66:bool = or %62, %65
    %67:i32 = select %rhs, 1i, %66
    %68:i32 = div %lhs, %67
    ret %68
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B11: {
    %70:i32 = convert %value
    %71:bool = gte %value, -2147483648.0f
    %72:i32 = select -2147483648i, %70, %71
    %73:bool = lte %value, 2147483520.0f
    %74:i32 = select 2147483647i, %72, %73
    ret %74
  }
}

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