SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %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_phi:ptr<function, bool, read_write> = var
    %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %9:vec2<f32> = load %8
    %x_32:vec2<f32> = let %9
    store %a, %x_32
    %11:f32 = load_vector_element %a, 0u
    %x_34:f32 = let %11
    %13:vec2<f32> = load %a
    %x_35:vec2<f32> = let %13
    %15:vec2<f32> = clamp %x_35, vec2<f32>(1.0f), vec2<f32>(1.0f)
    %16:f32 = access %15, 1u
    %17:vec2<f32> = construct %x_34, %16
    store %b, %17
    %18:f32 = load_vector_element %b, 0u
    %x_40:f32 = let %18
    %20:bool = eq %x_40, 2.0f
    %x_41:bool = let %20
    store %x_47_phi, %x_41
    if %x_41 [t: $B3] {  # if_1
      $B3: {  # true
        %22:f32 = load_vector_element %b, 1u
        %x_45:f32 = let %22
        %24:bool = eq %x_45, 1.0f
        store %x_46, %24
        %25:bool = load %x_46
        store %x_47_phi, %25
        exit_if  # if_1
      }
    }
    %26:bool = load %x_47_phi
    %x_47:bool = let %26
    if %x_47 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      $B5: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %29:void = call %main_1
    %30:vec4<f32> = load %x_GLF_color
    %31:main_out = construct %30
    ret %31
  }
}

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