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
    %11:f32 = load %10
    %12:vec4<f32> = construct %11
    store %v1, %12
    %13:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %14:i32 = load %13
    store %i, %14
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %15:i32 = load %i
        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %17:i32 = load %16
        %18:bool = lt %15, %17
        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
        %26:f32 = load_vector_element %25, 0u
        %27:i32 = convert %26
        store %a, %27
        %x_86:i32 = load %a
        %29:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %30:f32 = load %29
        %31:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %32:f32 = load %31
        %33:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %34:f32 = load %33
        %35:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %36:f32 = load %35
        %37:vec4<f32> = construct %30, %32, %34, %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %39:f32 = load %38
        %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %41:f32 = load %40
        %42:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %43:f32 = load %42
        %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %45:f32 = load %44
        %46:vec4<f32> = construct %39, %41, %43, %45
        %47:array<vec4<f32>, 2> = construct %37, %46
        store %indexable_1, %47
        %48:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
        %49:vec4<f32> = load %48
        store %v1, %49
        continue %b4
      }
      %b4 = block {  # continuing
        %50:i32 = load %i
        %51:i32 = add %50, 1i
        store %i, %51
        next_iteration %b3
      }
    }
    %52:vec4<f32> = load %v1
    store %x_GLF_color, %52
    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.  *
********************************************************************
