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 {
    %i:ptr<function, i32, read_write> = var
    %v:ptr<function, vec4<f32>, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %7:i32 = load %6
    store %i, %7
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %8:i32 = load %i
        %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %10:i32 = load %9
        %11:bool = lt %8, %10
        if %11 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        store %v, vec4<f32>(0.39215686917304992676f, 0.0f, 0.0f, 0.0f)
        %12:f32 = load_vector_element %v, 0u
        %13:i32 = convert %12
        %14:i32 = load %i
        %15:bool = gt %13, %14
        if %15 [t: %b7] {  # if_2
          %b7 = block {  # true
            %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %17:i32 = load %16
            %18:f32 = convert %17
            %19:vec4<f32> = construct %18
            store %x_GLF_color, %19
            ret
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %20:i32 = load %i
        %21:i32 = add %20, 1i
        store %i, %21
        next_iteration %b3
      }
    }
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %23:i32 = load %22
    %24:f32 = convert %23
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 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, 0i, 0u
    %32:i32 = load %31
    %33:f32 = convert %32
    %34:vec4<f32> = construct %24, %27, %30, %33
    store %x_GLF_color, %34
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %36:void = call %main_1
    %37:vec4<f32> = load %x_GLF_color
    %38:main_out = construct %37
    ret %38
  }
}

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