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, 4> @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: {
    %i:ptr<function, i32, read_write> = var
    %a:ptr<function, array<i32, 2>, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %7:i32 = load %6
    %x_32:i32 = let %7
    store %i, %x_32
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %9:i32 = load %i
        %x_37:i32 = let %9
        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %12:i32 = load %11
        %x_39:i32 = let %12
        %14:bool = lt %x_37, %x_39
        if %14 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %16:i32 = load %15
        %x_43:i32 = let %16
        %18:i32 = load %i
        %x_44:i32 = let %18
        %20:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %21:i32 = load %20
        %x_46:i32 = let %21
        %23:vec2<i32> = construct %x_44, %x_44
        %24:vec2<i32> = let %23
        %25:vec2<i32> = construct 3i, %x_46
        %26:vec2<i32> = call %tint_mod_v2i32, %24, %25
        %28:i32 = access %26, 1u
        %29:array<i32, 2> = construct %x_43, %28
        store %a, %29
        continue  # -> $B4
      }
      $B4: {  # continuing
        %30:i32 = load %i
        %x_52:i32 = let %30
        %32:i32 = add %x_52, 1i
        store %i, %32
        next_iteration  # -> $B3
      }
    }
    %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %34:i32 = load %33
    %x_55:i32 = let %34
    %36:ptr<function, i32, read_write> = access %a, %x_55
    %37:i32 = load %36
    %x_57:i32 = let %37
    %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %40:i32 = load %39
    %x_60:i32 = let %40
    %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %43:i32 = load %42
    %x_63:i32 = let %43
    %45:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %46:i32 = load %45
    %x_66:i32 = let %46
    %48:ptr<function, i32, read_write> = access %a, %x_66
    %49:i32 = load %48
    %x_68:i32 = let %49
    %51:f32 = convert %x_57
    %52:f32 = let %51
    %53:f32 = convert %x_60
    %54:f32 = let %53
    %55:f32 = convert %x_63
    %56:f32 = let %55
    %57:f32 = convert %x_68
    %58:vec4<f32> = construct %52, %54, %56, %57
    store %x_GLF_color, %58
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %60:void = call %main_1
    %61:vec4<f32> = load %x_GLF_color
    %62:main_out = construct %61
    ret %62
  }
}
%tint_mod_v2i32 = func(%lhs:vec2<i32>, %rhs:vec2<i32>):vec2<i32> {
  $B8: {
    %65:vec2<bool> = eq %rhs, vec2<i32>(0i)
    %66:vec2<bool> = eq %lhs, vec2<i32>(-2147483648i)
    %67:vec2<bool> = eq %rhs, vec2<i32>(-1i)
    %68:vec2<bool> = and %66, %67
    %69:vec2<bool> = or %65, %68
    %70:vec2<i32> = select %rhs, vec2<i32>(1i), %69
    %71:vec2<i32> = let %70
    %72:vec2<i32> = div %lhs, %71
    %73:vec2<i32> = mul %72, %71
    %74:vec2<i32> = sub %lhs, %73
    ret %74
  }
}

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