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
  %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: {
    %f:ptr<function, f32, read_write> = var
    store %f, 142.6999969482421875f
    %5:f32 = load %f
    %6:i32 = call %tint_f32_to_i32, %5
    %8:f32 = convert %6
    %9:bool = gt %8, 100.0f
    if %9 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %11:i32 = load %10
        %12:f32 = convert %11
        %13:f32 = let %12
        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %15:i32 = load %14
        %16:f32 = convert %15
        %17:f32 = let %16
        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %19:i32 = load %18
        %20:f32 = convert %19
        %21:f32 = let %20
        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %23:i32 = load %22
        %24:f32 = convert %23
        %25:vec4<f32> = construct %13, %17, %21, %24
        store %x_GLF_color, %25
        exit_if  # if_1
      }
      $B4: {  # false
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %27:i32 = load %26
        %28:f32 = convert %27
        %29:vec4<f32> = construct %28
        store %x_GLF_color, %29
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %31:void = call %main_1
    %32:vec4<f32> = load %x_GLF_color
    %33:main_out = construct %32
    ret %33
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B6: {
    %35:i32 = convert %value
    %36:bool = gte %value, -2147483648.0f
    %37:i32 = select -2147483648i, %35, %36
    %38:bool = lte %value, 2147483520.0f
    %39:i32 = select 2147483647i, %37, %38
    ret %39
  }
}

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