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_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 {
    %c: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 %c, %7
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 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 = complement %14
        store %c, %15
        %16:i32 = load %c
        %17:i32 = clamp %16, 0i, 3i
        store %c, %17
        continue %b4
      }
      %b4 = block {  # continuing
        %18:i32 = load %i
        %19:i32 = add %18, 1i
        store %i, %19
        next_iteration %b3
      }
    }
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %21:i32 = load %20
    %22:f32 = convert %21
    %23:vec4<f32> = construct %22
    store %x_GLF_color, %23
    %24:i32 = load %c
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %26:i32 = load %25
    %27:bool = eq %24, %26
    if %27 [t: %b7] {  # if_2
      %b7 = block {  # true
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %29:i32 = load %28
        %30:f32 = convert %29
        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %32:i32 = load %31
        %33:f32 = convert %32
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %38:i32 = load %37
        %39:f32 = convert %38
        %40:vec4<f32> = construct %30, %33, %36, %39
        store %x_GLF_color, %40
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %42:void = call %main_1
    %43:vec4<f32> = load %x_GLF_color
    %44:main_out = construct %43
    ret %44
  }
}

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