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_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: {
    %a:ptr<function, i32, read_write> = var
    %sum:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %a, 65536i
    %7:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %8:i32 = load %7
    %x_29:i32 = let %8
    store %sum, %x_29
    %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %11:i32 = load %10
    %x_31:i32 = let %11
    %13:bool = eq 1i, %x_31
    if %13 [t: $B3] {  # if_1
      $B3: {  # true
        %14:i32 = load %a
        %x_35:i32 = let %14
        %16:i32 = sub %x_35, 1i
        store %a, %16
        exit_if  # if_1
      }
    }
    store %i, 0i
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %17:i32 = load %i
        %x_41:i32 = let %17
        %19:i32 = load %a
        %x_42:i32 = let %19
        %21:bool = lt %x_41, %x_42
        if %21 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %22:i32 = load %i
        %x_45:i32 = let %22
        %24:i32 = load %sum
        %x_46:i32 = let %24
        %26:i32 = add %x_46, %x_45
        store %sum, %26
        continue  # -> $B5
      }
      $B5: {  # continuing
        %27:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %28:i32 = load %27
        %x_49:i32 = let %28
        %30:i32 = load %i
        %x_50:i32 = let %30
        %32:i32 = add %x_50, %x_49
        store %i, %32
        next_iteration  # -> $B4
      }
    }
    %33:i32 = load %sum
    %x_52:i32 = let %33
    %35:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
    %36:i32 = load %35
    %x_54:i32 = let %36
    %38:bool = eq %x_52, %x_54
    if %38 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %40:i32 = load %39
        %x_60:i32 = let %40
        %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %43:i32 = load %42
        %x_63:i32 = let %43
        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %46:i32 = load %45
        %x_66:i32 = let %46
        %48:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %49:i32 = load %48
        %x_69:i32 = let %49
        %51:f32 = convert %x_60
        %52:f32 = let %51
        %53:f32 = convert %x_63
        %54:f32 = let %53
        %55:f32 = convert %x_66
        %56:f32 = let %55
        %57:f32 = convert %x_69
        %58:vec4<f32> = construct %52, %54, %56, %57
        store %x_GLF_color, %58
        exit_if  # if_3
      }
      $B9: {  # false
        %59:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %60:i32 = load %59
        %x_73:i32 = let %60
        %62:f32 = convert %x_73
        %x_74:f32 = let %62
        %64:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
        store %x_GLF_color, %64
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %66:void = call %main_1
    %67:vec4<f32> = load %x_GLF_color
    %68:main_out = construct %67
    ret %68
  }
}

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