SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

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

%main_1 = func():void {
  $B2: {
    %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %5:i32 = load %4
    %x_22:i32 = let %5
    %7:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %8:i32 = load %7
    %x_25:i32 = let %8
    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %11:i32 = load %10
    %x_28:i32 = let %11
    %13:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %14:i32 = load %13
    %x_31:i32 = let %14
    %16:f32 = convert %x_22
    %17:f32 = let %16
    %18:f32 = convert %x_25
    %19:f32 = let %18
    %20:f32 = convert %x_28
    %21:f32 = let %20
    %22:f32 = convert %x_31
    %23:vec4<f32> = construct %17, %19, %21, %22
    store %x_GLF_color, %23
    %24:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %25:i32 = load %24
    %x_35:i32 = let %25
    %27:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %28:i32 = load %27
    %x_37:i32 = let %28
    %30:bool = gt %x_35, %x_37
    if %30 [t: $B3] {  # if_1
      $B3: {  # true
        loop [b: $B4, c: $B5] {  # loop_1
          $B4: {  # body
            %31:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
            %32:i32 = load %31
            %x_46:i32 = let %32
            %34:f32 = convert %x_46
            %x_47:f32 = let %34
            %36:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
            store %x_GLF_color, %36
            continue  # -> $B5
          }
          $B5: {  # continuing
            %37:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
            %38:i32 = load %37
            %x_50:i32 = let %38
            %40:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
            %41:i32 = load %40
            %x_52:i32 = let %41
            %43:bool = gt %x_50, %x_52
            %44:bool = eq %43, false
            break_if %44  # -> [t: exit_loop loop_1, f: $B4]
          }
        }
        ret
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %46:void = call %main_1
    %47:vec4<f32> = load %x_GLF_color
    %48:main_out = construct %47
    ret %48
  }
}

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