SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_42:i32 = load %7
    %9:ptr<function, i32, read_write> = access %arr, %x_42
    %x_44:i32 = load %9
    %11:bool = eq %x_44, 2i
    if %11 [t: %b3] {  # if_1
      %b3 = block {  # true
        %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_49:i32 = load %12
        store %i, %x_49
        loop [b: %b4, c: %b5] {  # loop_1
          %b4 = block {  # body
            %x_54:i32 = load %i
            %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
            %x_56:i32 = load %15
            %17:bool = lt %x_54, %x_56
            if %17 [t: %b6, f: %b7] {  # if_2
              %b6 = block {  # true
                exit_if  # if_2
              }
              %b7 = block {  # false
                exit_loop  # loop_1
              }
            }
            continue %b5
          }
          %b5 = block {  # continuing
            %x_59:i32 = load %i
            %19:i32 = add %x_59, 1i
            store %i, %19
            next_iteration %b4
          }
        }
        %x_61:i32 = load %a
        %21:i32 = add %x_61, 1i
        store %a, %21
        exit_if  # if_1
      }
    }
    %x_63:i32 = load %a
    %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %x_66:i32 = load %23
    %25:i32 = mod -1i, %x_63
    %26:bool = eq %25, %x_66
    if %26 [t: %b8] {  # if_3
      %b8 = block {  # true
        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_71:i32 = load %27
        %29:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_75:i32 = load %29
        %31:vec2<i32> = construct %x_71, %x_71
        %32:i32 = access %31, 1u
        %33:ptr<function, i32, read_write> = access %arr, %32
        store %33, %x_75
        exit_if  # if_3
      }
    }
    %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %x_78:i32 = load %34
    %36:ptr<function, i32, read_write> = access %arr, %x_78
    %x_80:i32 = load %36
    %38:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %x_82:i32 = load %38
    %40:bool = eq %x_80, %x_82
    if %40 [t: %b9, f: %b10] {  # if_4
      %b9 = block {  # true
        %41:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_88:i32 = load %41
        %43:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_91:i32 = load %43
        %45:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_94:i32 = load %45
        %47:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_97:i32 = load %47
        %49:f32 = convert %x_88
        %50:f32 = convert %x_91
        %51:f32 = convert %x_94
        %52:f32 = convert %x_97
        %53:vec4<f32> = construct %49, %50, %51, %52
        store %x_GLF_color, %53
        exit_if  # if_4
      }
      %b10 = block {  # false
        %54:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_101:i32 = load %54
        %x_102:f32 = convert %x_101
        %57:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
        store %x_GLF_color, %57
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}

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