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
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %7:i32 = load %6
    %x_26:i32 = let %7
    store %a, %x_26
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %10:i32 = load %9
    %x_28:i32 = let %10
    store %i, %x_28
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %12:i32 = load %i
        %x_33:i32 = let %12
        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %15:i32 = load %14
        %x_35:i32 = let %15
        %17:bool = lt %x_33, %x_35
        if %17 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %18:i32 = load %i
        %x_38:i32 = let %18
        %20:i32 = complement %x_38
        %21:bool = neq %20, 0i
        if %21 [t: $B7] {  # if_2
          $B7: {  # true
            %22:i32 = load %a
            %x_43:i32 = let %22
            %24:i32 = add %x_43, 1i
            store %a, %24
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %25:i32 = load %i
        %x_45:i32 = let %25
        %27:i32 = add %x_45, 1i
        store %i, %27
        next_iteration  # -> $B3
      }
    }
    %28:i32 = load %a
    %x_47:i32 = let %28
    %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %31:i32 = load %30
    %x_49:i32 = let %31
    %33:bool = eq %x_47, %x_49
    if %33 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %35:i32 = load %34
        %x_55:i32 = let %35
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %38:i32 = load %37
        %x_58:i32 = let %38
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %41:i32 = load %40
        %x_61:i32 = let %41
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %44:i32 = load %43
        %x_64:i32 = let %44
        %46:f32 = convert %x_55
        %47:f32 = let %46
        %48:f32 = convert %x_58
        %49:f32 = let %48
        %50:f32 = convert %x_61
        %51:f32 = let %50
        %52:f32 = convert %x_64
        %53:vec4<f32> = construct %47, %49, %51, %52
        store %x_GLF_color, %53
        exit_if  # if_3
      }
      $B9: {  # false
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %55:i32 = load %54
        %x_68:i32 = let %55
        %57:f32 = convert %x_68
        %x_69:f32 = let %57
        %59:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
        store %x_GLF_color, %59
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %61:void = call %main_1
    %62:vec4<f32> = load %x_GLF_color
    %63:main_out = construct %62
    ret %63
  }
}

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