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
    %x_30:i32 = load %6
    store %i, %x_30
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_35:i32 = load %i
        %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_37:i32 = load %9
        %11:bool = lt %x_35, %x_37
        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)
        %x_42:f32 = load_vector_element %v, 0u
        %x_44:i32 = load %i
        %14:i32 = convert %x_42
        %15:bool = gt %14, %x_44
        if %15 [t: %b7] {  # if_2
          %b7 = block {  # true
            %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %x_49:i32 = load %16
            %x_50:f32 = convert %x_49
            %19:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
            store %x_GLF_color, %19
            ret
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_52:i32 = load %i
        %21:i32 = add %x_52, 1i
        store %i, %21
        next_iteration %b3
      }
    }
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_55:i32 = load %22
    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_58:i32 = load %24
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_61:i32 = load %26
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_64:i32 = load %28
    %30:f32 = convert %x_55
    %31:f32 = convert %x_58
    %32:f32 = convert %x_61
    %33:f32 = convert %x_64
    %34:vec4<f32> = construct %30, %31, %32, %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.  *
********************************************************************
