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
    %6:f32 = load_vector_element %gl_FragCoord, 0u
    %x_28:f32 = let %6
    %8:i32 = call %tint_f32_to_i32, %x_28
    store %a, %8
    %10:i32 = load %a
    %x_30:i32 = let %10
    %12:i32 = complement %x_30
    %13:bool = lt %12, 0i
    if %13 [t: $B3] {  # if_1
      $B3: {  # true
        %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %15:i32 = load %14
        %x_36:i32 = let %15
        store %a, %x_36
        exit_if  # if_1
      }
    }
    %17:i32 = load %a
    %x_37:i32 = let %17
    %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %20:i32 = load %19
    %x_39:i32 = let %20
    %22:bool = eq %x_37, %x_39
    if %22 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %24:i32 = load %23
        %x_45:i32 = let %24
        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %27:i32 = load %26
        %x_48:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %30:i32 = load %29
        %x_51:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %33:i32 = load %32
        %x_54:i32 = let %33
        %35:f32 = convert %x_45
        %36:f32 = let %35
        %37:f32 = convert %x_48
        %38:f32 = let %37
        %39:f32 = convert %x_51
        %40:f32 = let %39
        %41:f32 = convert %x_54
        %42:vec4<f32> = construct %36, %38, %40, %41
        store %x_GLF_color, %42
        exit_if  # if_2
      }
      $B5: {  # false
        %43:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %44:i32 = load %43
        %x_58:i32 = let %44
        %46:f32 = convert %x_58
        %x_59:f32 = let %46
        %48:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
        store %x_GLF_color, %48
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B6: {
    store %gl_FragCoord, %gl_FragCoord_param
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B7: {
    %55:i32 = convert %value
    %56:bool = gte %value, -2147483648.0f
    %57:i32 = select -2147483648i, %55, %56
    %58:bool = lte %value, 2147483520.0f
    %59:i32 = select 2147483647i, %57, %58
    ret %59
  }
}

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