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_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: {
    %arr:ptr<function, array<i32, 10>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %arr, array<i32, 10>(1i, 2i, 3i, 4i, 5i, 6i, 7i, 8i, 9i, 10i)
    store %a, 0i
    %7:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %8:i32 = load %7
    %9:ptr<function, i32, read_write> = access %arr, %8
    %10:i32 = load %9
    %11:bool = eq %10, 2i
    if %11 [t: $B3] {  # if_1
      $B3: {  # true
        %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %13:i32 = load %12
        store %i, %13
        loop [b: $B4, c: $B5] {  # loop_1
          $B4: {  # body
            %14:i32 = load %i
            %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
            %16:i32 = load %15
            %17:bool = lt %14, %16
            if %17 [t: $B6, f: $B7] {  # if_2
              $B6: {  # true
                exit_if  # if_2
              }
              $B7: {  # false
                exit_loop  # loop_1
              }
            }
            continue  # -> $B5
          }
          $B5: {  # continuing
            %18:i32 = load %i
            %19:i32 = add %18, 1i
            store %i, %19
            next_iteration  # -> $B4
          }
        }
        %20:i32 = load %a
        %21:i32 = add %20, 1i
        store %a, %21
        exit_if  # if_1
      }
    }
    %22:i32 = load %a
    %23:i32 = call %tint_mod_i32, -1i, %22
    %25:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %26:i32 = load %25
    %27:bool = eq %23, %26
    if %27 [t: $B8] {  # if_3
      $B8: {  # true
        %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %29:i32 = load %28
        %x_71:i32 = let %29
        %31:vec2<i32> = construct %x_71
        %32:i32 = access %31, 1u
        %33:ptr<function, i32, read_write> = access %arr, %32
        %34:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %35:i32 = load %34
        store %33, %35
        exit_if  # if_3
      }
    }
    %36:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %37:i32 = load %36
    %38:ptr<function, i32, read_write> = access %arr, %37
    %39:i32 = load %38
    %40:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %41:i32 = load %40
    %42:bool = eq %39, %41
    if %42 [t: $B9, f: $B10] {  # if_4
      $B9: {  # true
        %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %44:i32 = load %43
        %45:f32 = convert %44
        %46:f32 = let %45
        %47:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %48:i32 = load %47
        %49:f32 = convert %48
        %50:f32 = let %49
        %51:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %52:i32 = load %51
        %53:f32 = convert %52
        %54:f32 = let %53
        %55:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %56:i32 = load %55
        %57:f32 = convert %56
        %58:vec4<f32> = construct %46, %50, %54, %57
        store %x_GLF_color, %58
        exit_if  # if_4
      }
      $B10: {  # false
        %59:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %60:i32 = load %59
        %61:f32 = convert %60
        %62:vec4<f32> = construct %61
        store %x_GLF_color, %62
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %64:void = call %main_1
    %65:vec4<f32> = load %x_GLF_color
    %66:main_out = construct %65
    ret %66
  }
}
%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B12: {
    %69:bool = eq %rhs, 0i
    %70:bool = eq %lhs, -2147483648i
    %71:bool = eq %rhs, -1i
    %72:bool = and %70, %71
    %73:bool = or %69, %72
    %74:i32 = select %rhs, 1i, %73
    %75:i32 = let %74
    %76:i32 = div %lhs, %75
    %77:i32 = mul %76, %75
    %78:i32 = sub %lhs, %77
    ret %78
  }
}

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