SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 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_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %v1:ptr<function, vec4<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<vec4<f32>, 2>, read_write> = var
    %indexable_1:ptr<function, array<vec4<f32>, 2>, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_45:f32 = load %10
    %12:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
    store %v1, %12
    %13:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_48:i32 = load %13
    store %i, %x_48
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_53:i32 = load %i
        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_55:i32 = load %16
        %18:bool = lt %x_53, %x_55
        if %18 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_58:i32 = load %i
        %20:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_60:i32 = load %20
        %22:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %x_62:i32 = load %22
        store %indexable, array<vec4<f32>, 2>(vec4<f32>(1.0f), vec4<f32>(0.0f))
        %24:i32 = clamp %x_58, %x_60, %x_62
        %25:ptr<function, vec4<f32>, read_write> = access %indexable, %24
        %x_65:f32 = load_vector_element %25, 0u
        %27:i32 = convert %x_65
        store %a, %27
        %28:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_68:f32 = load %28
        %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %x_70:f32 = load %30
        %32:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %x_72:f32 = load %32
        %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_74:f32 = load %34
        %36:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %x_77:f32 = load %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_79:f32 = load %38
        %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_81:f32 = load %40
        %42:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %x_83:f32 = load %42
        %x_86:i32 = load %a
        %45:vec4<f32> = construct %x_68, %x_70, %x_72, %x_74
        %46:vec4<f32> = construct %x_77, %x_79, %x_81, %x_83
        %47:array<vec4<f32>, 2> = construct %45, %46
        store %indexable_1, %47
        %48:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
        %x_88:vec4<f32> = load %48
        store %v1, %x_88
        continue %b4
      }
      %b4 = block {  # continuing
        %x_89:i32 = load %i
        %51:i32 = add %x_89, 1i
        store %i, %51
        next_iteration %b3
      }
    }
    %x_91:vec4<f32> = load %v1
    store %x_GLF_color, %x_91
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b7 {
  %b7 = block {
    %54:void = call %main_1
    %55:vec4<f32> = load %x_GLF_color
    %56:main_out = construct %55
    ret %56
  }
}

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