SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
  twoandthree:vec2<f32> @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 {
    %a:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, vec2<f32>, read_write> = var
    %x_46:ptr<function, bool, read_write> = var
    %x_47:ptr<function, bool, read_write> = var
    %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %9:vec2<f32> = load %8
    store %a, %9
    %10:f32 = load_vector_element %a, 0u
    %11:vec2<f32> = load %a
    %12:vec2<f32> = clamp %11, vec2<f32>(1.0f), vec2<f32>(1.0f)
    %13:f32 = access %12, 1u
    %14:vec2<f32> = construct %10, %13
    store %b, %14
    %15:f32 = load_vector_element %b, 0u
    %x_41:bool = eq %15, 2.0f
    store %x_47, %x_41
    if %x_41 [t: %b3] {  # if_1
      %b3 = block {  # true
        %17:f32 = load_vector_element %b, 1u
        %18:bool = eq %17, 1.0f
        store %x_46, %18
        %19:bool = load %x_46
        store %x_47, %19
        exit_if  # if_1
      }
    }
    %20:bool = load %x_47
    if %20 [t: %b4, f: %b5] {  # if_2
      %b4 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      %b5 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b6 {
  %b6 = block {
    %22:void = call %main_1
    %23:vec4<f32> = load %x_GLF_color
    %24:main_out = construct %23
    ret %24
  }
}

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