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 {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %7:i32 = load %6
    store %a, %7
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 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, 2i, 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
        %16:bool = neq %15, 0i
        if %16 [t: %b7] {  # if_2
          %b7 = block {  # true
            %17:i32 = load %a
            %18:i32 = add %17, 1i
            store %a, %18
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %19:i32 = load %i
        %20:i32 = add %19, 1i
        store %i, %20
        next_iteration %b3
      }
    }
    %21:i32 = load %a
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %23:i32 = load %22
    %24:bool = eq %21, %23
    if %24 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %26:i32 = load %25
        %27:f32 = convert %26
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 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, 0i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:vec4<f32> = construct %27, %30, %33, %36
        store %x_GLF_color, %37
        exit_if  # if_3
      }
      %b9 = block {  # false
        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %40
        store %x_GLF_color, %41
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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