rustc_hir/
weak_lang_items.rs

1//! Validity checking for weak lang items
2
3use rustc_span::{Symbol, sym};
4
5use crate::LangItem;
6
7macro_rules! weak_lang_items {
8    ($($item:ident, $sym:ident;)*) => {
9        pub static WEAK_LANG_ITEMS: &[LangItem] = &[$(LangItem::$item,)*];
10
11        impl LangItem {
12            pub fn is_weak(self) -> bool {
13                matches!(self, $(LangItem::$item)|*)
14            }
15
16            pub fn link_name(self) -> Option<Symbol> {
17                match self {
18                    $( LangItem::$item => Some(sym::$sym),)*
19                    _ => None,
20                }
21            }
22        }
23    }
24}
25
26pub static WEAK_LANG_ITEMS: &[LangItem] =
    &[LangItem::PanicImpl, LangItem::EhPersonality,
                LangItem::EhCatchTypeinfo];
impl LangItem {
    pub fn is_weak(self) -> bool {

        #[allow(non_exhaustive_omitted_patterns)]
        match self {
            LangItem::PanicImpl | LangItem::EhPersonality |
                LangItem::EhCatchTypeinfo => true,
            _ => false,
        }
    }
    pub fn link_name(self) -> Option<Symbol> {
        match self {
            LangItem::PanicImpl => Some(sym::rust_begin_unwind),
            LangItem::EhPersonality => Some(sym::rust_eh_personality),
            LangItem::EhCatchTypeinfo => Some(sym::rust_eh_catch_typeinfo),
            _ => None,
        }
    }
}weak_lang_items! {
27    PanicImpl,          rust_begin_unwind;
28    EhPersonality,      rust_eh_personality;
29    EhCatchTypeinfo,    rust_eh_catch_typeinfo;
30}