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_6: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
    store %a, -7563i
    %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %6:i32 = load %5
    %7:i32 = load %a
    %8:i32 = call %tint_div_i32, %6, %7
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %11:i32 = load %10
    %12:bool = eq %8, %11
    if %12 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %14:i32 = load %13
        %15:f32 = convert %14
        %16:f32 = let %15
        %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %18:i32 = load %17
        %19:f32 = convert %18
        %20:f32 = let %19
        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %22:i32 = load %21
        %23:f32 = convert %22
        %24:f32 = let %23
        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %26:i32 = load %25
        %27:f32 = convert %26
        %28:vec4<f32> = construct %16, %20, %24, %27
        store %x_GLF_color, %28
        exit_if  # if_1
      }
      $B4: {  # false
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %30:i32 = load %29
        %31:f32 = convert %30
        %32:vec4<f32> = construct %31
        store %x_GLF_color, %32
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %34:void = call %main_1
    %35:vec4<f32> = load %x_GLF_color
    %36:main_out = construct %35
    ret %36
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B6: {
    %39:bool = eq %rhs, 0i
    %40:bool = eq %lhs, -2147483648i
    %41:bool = eq %rhs, -1i
    %42:bool = and %40, %41
    %43:bool = or %39, %42
    %44:i32 = select %rhs, 1i, %43
    %45:i32 = div %lhs, %44
    ret %45
  }
}

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