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: {
    %i:ptr<function, i32, read_write> = var
    %A:ptr<function, array<i32, 2>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %8:i32 = load %7
    %x_30:i32 = let %8
    store %i, %x_30
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %10:i32 = load %i
        %x_35:i32 = let %10
        %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %13:i32 = load %12
        %x_37:i32 = let %13
        %15:bool = lt %x_35, %x_37
        if %15 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %16:i32 = load %i
        %x_40:i32 = let %16
        %18:i32 = load %i
        %x_41:i32 = let %18
        %20:ptr<function, i32, read_write> = access %A, %x_40
        store %20, %x_41
        continue  # -> $B4
      }
      $B4: {  # continuing
        %21:i32 = load %i
        %x_43:i32 = let %21
        %23:i32 = add %x_43, 1i
        store %i, %23
        next_iteration  # -> $B3
      }
    }
    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %25:i32 = load %24
    %x_46:i32 = let %25
    %27:ptr<function, i32, read_write> = access %A, %x_46
    %28:i32 = load %27
    %x_48:i32 = let %28
    %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %31:i32 = load %30
    %x_51:i32 = let %31
    %33:ptr<function, i32, read_write> = access %A, %x_51
    %34:i32 = load %33
    %x_53:i32 = let %34
    %36:i32 = complement %x_48
    %37:i32 = complement %x_53
    %38:i32 = min %36, %37
    store %a, %38
    %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %40:i32 = load %39
    %x_57:i32 = let %40
    %42:f32 = convert %x_57
    %x_58:f32 = let %42
    %44:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
    store %x_GLF_color, %44
    %45:i32 = load %a
    %x_60:i32 = let %45
    %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %48:i32 = load %47
    %x_62:i32 = let %48
    %50:i32 = negation %x_62
    %51:bool = eq %x_60, %50
    if %51 [t: $B7] {  # if_2
      $B7: {  # true
        %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %53:i32 = load %52
        %x_68:i32 = let %53
        %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %56:i32 = load %55
        %x_71:i32 = let %56
        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %59:i32 = load %58
        %x_74:i32 = let %59
        %61:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %62:i32 = load %61
        %x_77:i32 = let %62
        %64:f32 = convert %x_68
        %65:f32 = let %64
        %66:f32 = convert %x_71
        %67:f32 = let %66
        %68:f32 = convert %x_74
        %69:f32 = let %68
        %70:f32 = convert %x_77
        %71:vec4<f32> = construct %65, %67, %69, %70
        store %x_GLF_color, %71
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %73:void = call %main_1
    %74:vec4<f32> = load %x_GLF_color
    %75:main_out = construct %74
    ret %75
  }
}

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