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

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