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

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