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, 2> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %a:ptr<function, f32, read_write> = var
    %6:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
    %x_31:f32 = load %6
    %8:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
    store %x_GLF_color, %8
    %9:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %x_34:f32 = load %9
    store %a, %x_34
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %11:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_40:f32 = load %11
        %13:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_43:f32 = load %13
        %15:f32 = div %x_40, 0.20000000298023223877f
        %16:bool = lt %15, %x_43
        if %16 [t: %b5] {  # if_1
          %b5 = block {  # true
            ret
          }
        }
        %17:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_48:f32 = load %17
        %19:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_51:f32 = load %19
        %21:f32 = div %x_48, 0.20000000298023223877f
        %22:bool = lt %21, %x_51
        if %22 [t: %b6] {  # if_2
          %b6 = block {  # true
            ret
          }
        }
        %23:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_56:f32 = load %23
        %25:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_59:f32 = load %25
        %27:f32 = div %x_56, 0.20000000298023223877f
        %28:bool = lt %27, %x_59
        if %28 [t: %b7] {  # if_3
          %b7 = block {  # true
            ret
          }
        }
        %29:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_64:f32 = load %29
        %31:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_67:f32 = load %31
        %33:f32 = div %x_64, 0.20000000298023223877f
        %34:bool = lt %33, %x_67
        if %34 [t: %b8, f: %b9] {  # if_4
          %b8 = block {  # true
            ret
          }
          %b9 = block {  # false
            store %a, 0.0f
            exit_if  # if_4
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_72:f32 = load %a
        %36:bool = eq %x_72, 0.0f
        %37:bool = eq %36, false
        break_if %37 %b3
      }
    }
    %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %x_75:i32 = load %38
    %40:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_78:i32 = load %40
    %42:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_81:i32 = load %42
    %44:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %x_84:i32 = load %44
    %46:f32 = convert %x_75
    %47:f32 = convert %x_78
    %48:f32 = convert %x_81
    %49:f32 = convert %x_84
    %50:vec4<f32> = construct %46, %47, %48, %49
    store %x_GLF_color, %50
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %52:void = call %main_1
    %53:vec4<f32> = load %x_GLF_color
    %54:main_out = construct %53
    ret %54
  }
}

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