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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %6:f32 = load_vector_element %gl_FragCoord, 0u
    %x_30:f32 = let %6
    %8:i32 = call %tint_f32_to_i32, %x_30
    %10:i32 = min 1i, %8
    %11:i32 = max 1i, %10
    store %a, %11
    %12:i32 = load %a
    %x_34:i32 = let %12
    %14:bool = lt %x_34, 2i
    if %14 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %16:i32 = load %15
        %x_40:i32 = let %16
        %18:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %19:i32 = load %18
        %x_43:i32 = let %19
        %21:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %22:i32 = load %21
        %x_46:i32 = let %22
        %24:f32 = convert %x_40
        %25:f32 = let %24
        %26:f32 = convert %x_43
        %27:f32 = let %26
        %28:f32 = convert %x_46
        %29:vec4<f32> = construct 1.0f, %25, %27, %28
        store %x_GLF_color, %29
        exit_if  # if_1
      }
      $B4: {  # false
        %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %31:i32 = load %30
        %x_50:i32 = let %31
        %33:f32 = convert %x_50
        %x_51:f32 = let %33
        %35:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
        store %x_GLF_color, %35
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B5: {
    store %gl_FragCoord, %gl_FragCoord_param
    %38:void = call %main_1
    %39:vec4<f32> = load %x_GLF_color
    %40:main_out = construct %39
    ret %40
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B6: {
    %42:i32 = convert %value
    %43:bool = gte %value, -2147483648.0f
    %44:i32 = select -2147483648i, %42, %43
    %45:bool = lte %value, 2147483520.0f
    %46:i32 = select 2147483647i, %44, %45
    ret %46
  }
}

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