SKIP: FAILED

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

strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 1> @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_6:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_10: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 {
    %a:ptr<function, i32, read_write> = var
    %x_32:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u
    %x_34:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %x_36:f32 = load %10
    %12:bool = lt %x_34, %x_36
    if %12 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %13:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_42:i32 = load %13
        store %x_32, %x_42
        exit_if  # if_1
      }
      %b4 = block {  # false
        %15:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_44:i32 = load %15
        store %x_32, %x_44
        exit_if  # if_1
      }
    }
    %x_45:i32 = load %x_32
    %18:i32 = or %x_45, 1i
    %19:i32 = complement %18
    store %a, %19
    %x_48:i32 = load %a
    %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %x_50:i32 = load %21
    %23:i32 = complement %x_50
    %24:bool = eq %x_48, %23
    if %24 [t: %b5, f: %b6] {  # if_2
      %b5 = block {  # true
        %25:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_57:i32 = load %25
        %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_60:i32 = load %27
        %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_63:i32 = load %29
        %31:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_66:i32 = load %31
        %33:f32 = convert %x_57
        %34:f32 = convert %x_60
        %35:f32 = convert %x_63
        %36:f32 = convert %x_66
        %37:vec4<f32> = construct %33, %34, %35, %36
        store %x_GLF_color, %37
        exit_if  # if_2
      }
      %b6 = block {  # false
        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_70:i32 = load %38
        %x_71:f32 = convert %x_70
        %41:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
        store %x_GLF_color, %41
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b7 {
  %b7 = block {
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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