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_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: {
    %f:ptr<function, f32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    store %f, 2.0f
    %6:f32 = load %f
    %7:f32 = clamp 1.0f, 1.0f, %6
    %8:f32 = sub 1.0f, %7
    %9:i32 = call %tint_f32_to_i32, %8
    store %a, %9
    %11:i32 = load %a
    %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %13:i32 = load %12
    %14:bool = eq %11, %13
    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
        %17:f32 = convert %16
        %18:f32 = let %17
        %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %20:i32 = load %19
        %21:f32 = convert %20
        %22:f32 = let %21
        %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %24:i32 = load %23
        %25:f32 = convert %24
        %26:f32 = let %25
        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %28:i32 = load %27
        %29:f32 = convert %28
        %30:vec4<f32> = construct %18, %22, %26, %29
        store %x_GLF_color, %30
        exit_if  # if_1
      }
      $B4: {  # false
        %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %32:i32 = load %31
        %33:f32 = convert %32
        %34:vec4<f32> = construct %33
        store %x_GLF_color, %34
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %36:void = call %main_1
    %37:vec4<f32> = load %x_GLF_color
    %38:main_out = construct %37
    ret %38
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B6: {
    %40:i32 = convert %value
    %41:bool = gte %value, -2147483648.0f
    %42:i32 = select -2147483648i, %40, %41
    %43:bool = lte %value, 2147483520.0f
    %44:i32 = select 2147483647i, %42, %43
    ret %44
  }
}

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