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, 5> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # 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 {
  %b2 = block {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<i32, 9>, read_write> = var
    %7:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %8:i32 = load %7
    store %a, %8
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %10:i32 = load %9
    store %i, %10
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %11:i32 = load %i
        %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %13:i32 = load %12
        %14:bool = lt %11, %13
        if %14 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_50:i32 = load %i
        %16:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %x_52:i32 = load %16
        store %indexable, array<i32, 9>(1i, 2i, 3i, 4i, 5i, 6i, 7i, 8i, 9i)
        %18:i32 = load %a
        %19:i32 = mod %x_50, %x_52
        %20:ptr<function, i32, read_write> = access %indexable, %19
        %21:i32 = load %20
        %22:i32 = add %18, %21
        store %a, %22
        continue %b4
      }
      %b4 = block {  # continuing
        %23:i32 = load %i
        %24:i32 = add %23, 1i
        store %i, %24
        next_iteration %b3
      }
    }
    %25:i32 = load %a
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %27:i32 = load %26
    %28:bool = eq %25, %27
    if %28 [t: %b7, f: %b8] {  # if_2
      %b7 = block {  # true
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %30:i32 = load %29
        %31:f32 = convert %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %33:i32 = load %32
        %34:f32 = convert %33
        %35:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %36:i32 = load %35
        %37:f32 = convert %36
        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %31, %34, %37, %40
        store %x_GLF_color, %41
        exit_if  # if_2
      }
      %b8 = block {  # false
        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:vec4<f32> = construct %44
        store %x_GLF_color, %45
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b9 {
  %b9 = block {
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}

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