]> git.lizzy.rs Git - rust.git/blob - src/linkage.rs
Merge pull request #694 from Atul9/cargo-fmt
[rust.git] / src / linkage.rs
1 use rustc::mir::mono::{Linkage as RLinkage, MonoItem, Visibility};
2
3 use crate::prelude::*;
4
5 pub fn get_clif_linkage(mono_item: MonoItem, linkage: RLinkage, visibility: Visibility) -> Linkage {
6     match (linkage, visibility) {
7         (RLinkage::External, Visibility::Default) => Linkage::Export,
8         (RLinkage::Internal, Visibility::Default) => Linkage::Local,
9         // FIXME this should get external linkage, but hidden visibility,
10         // not internal linkage and default visibility
11         (RLinkage::External, Visibility::Hidden) => Linkage::Export,
12         _ => panic!("{:?} = {:?} {:?}", mono_item, linkage, visibility),
13     }
14 }
15
16 pub fn get_static_ref_linkage(tcx: TyCtxt, def_id: DefId) -> Linkage {
17     let fn_attrs = tcx.codegen_fn_attrs(def_id);
18
19     if let Some(linkage) = fn_attrs.linkage {
20         match linkage {
21             RLinkage::External => Linkage::Export,
22             RLinkage::Internal => Linkage::Local,
23             RLinkage::ExternalWeak | RLinkage::WeakAny => Linkage::Preemptible,
24             _ => panic!("{:?}", linkage),
25         }
26     } else {
27         Linkage::Import
28     }
29 }