1 use rustc_middle::mir::mono::{Linkage as RLinkage, MonoItem, Visibility};
5 pub(crate) fn get_clif_linkage(
6 mono_item: MonoItem<'_>,
8 visibility: Visibility,
9 is_compiler_builtins: bool,
11 match (linkage, visibility) {
12 (RLinkage::External, Visibility::Default) if is_compiler_builtins => Linkage::Hidden,
13 (RLinkage::External, Visibility::Default) => Linkage::Export,
14 (RLinkage::Internal, Visibility::Default) => Linkage::Local,
15 (RLinkage::External, Visibility::Hidden) => Linkage::Hidden,
16 (RLinkage::WeakAny, Visibility::Default) => Linkage::Preemptible,
17 _ => panic!("{:?} = {:?} {:?}", mono_item, linkage, visibility),
21 pub(crate) fn get_static_linkage(tcx: TyCtxt<'_>, def_id: DefId) -> Linkage {
22 let fn_attrs = tcx.codegen_fn_attrs(def_id);
24 if let Some(linkage) = fn_attrs.linkage {
26 RLinkage::External => Linkage::Export,
27 RLinkage::Internal => Linkage::Local,
28 RLinkage::ExternalWeak | RLinkage::WeakAny => Linkage::Preemptible,
29 _ => panic!("{:?}", linkage),
31 } else if tcx.is_reachable_non_generic(def_id) {