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
    %7:i32 = call %tint_f32_to_i32, %6
    store %a, %7
    %9:i32 = load %a
    %10:i32 = complement %9
    %11:bool = lt %10, 0i
    if %11 [t: $B3] {  # if_1
      $B3: {  # true
        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %13:i32 = load %12
        store %a, %13
        exit_if  # if_1
      }
    }
    %14:i32 = load %a
    %15:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %16:i32 = load %15
    %17:bool = eq %14, %16
    if %17 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %19:i32 = load %18
        %20:f32 = convert %19
        %21:f32 = let %20
        %22:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %23:i32 = load %22
        %24:f32 = convert %23
        %25:f32 = let %24
        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %27:i32 = load %26
        %28:f32 = convert %27
        %29:f32 = let %28
        %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:vec4<f32> = construct %21, %25, %29, %32
        store %x_GLF_color, %33
        exit_if  # if_2
      }
      $B5: {  # false
        %34:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:vec4<f32> = construct %36
        store %x_GLF_color, %37
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B6: {
    store %gl_FragCoord, %gl_FragCoord_param
    %40:void = call %main_1
    %41:vec4<f32> = load %x_GLF_color
    %42:main_out = construct %41
    ret %42
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B7: {
    %44:i32 = convert %value
    %45:bool = gte %value, -2147483648.0f
    %46:i32 = select -2147483648i, %44, %45
    %47:bool = lte %value, 2147483520.0f
    %48:i32 = select 2147483647i, %46, %47
    ret %48
  }
}

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