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

%main_1 = func():void {
  $B2: {
    %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %5:i32 = load %4
    %6:u32 = bitcast %5
    %7:u32 = and %6, 31u
    %8:i32 = shr 1i, %7
    %9:bool = gt %8, 0i
    if %9 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %11:i32 = load %10
        %12:f32 = convert %11
        %13:f32 = let %12
        %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
        %15:i32 = load %14
        %16:f32 = convert %15
        %17:f32 = let %16
        %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
        %19:i32 = load %18
        %20:f32 = convert %19
        %21:f32 = let %20
        %22:ptr<uniform, i32, read> = access %x_5, 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_5, 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
  }
}

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