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_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %x_32:ptr<function, i32, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %x_24:i32 = load %5
    %x_25:f32 = convert %x_24
    %8:vec4<f32> = construct %x_25
    store %x_GLF_color, %8
    %9:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %x_28:i32 = load %9
    %11:u32 = bitcast %x_28
    %12:i32 = shiftl %x_28, %11
    %x_30:i32 = shiftr %12, 1u
    store %x_32, %x_24
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %14:bool = lt %x_30, 10i
        if %14 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %15:i32 = load %x_32
        %x_33:i32 = add %15, 1i
        %17:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
        %18:i32 = load %17
        %19:bool = eq %x_33, %18
        if %19 [t: %b7] {  # if_2
          %b7 = block {  # true
            %x_43:f32 = convert %x_28
            %21:vec4<f32> = construct %x_43, %x_25, %x_25, %x_43
            store %x_GLF_color, %21
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        store %x_32, %x_33
        next_iteration %b3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    ret %25
  }
}

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