]> git.lizzy.rs Git - rust.git/commitdiff
Use the linkage and visibility produced by tcx.collect_and_partition_mono_itemscc...
authorbjorn3 <bjorn3@users.noreply.github.com>
Sun, 23 Dec 2018 18:11:17 +0000 (19:11 +0100)
committerbjorn3 <bjorn3@users.noreply.github.com>
Sun, 23 Dec 2018 18:41:35 +0000 (19:41 +0100)
src/base.rs
src/lib.rs

index 46e47b99224d0edde70c0750f89a28736b99cae4..b3c87258a34e9630ae431c9c8c0ba4f05b2ce3a9 100644 (file)
@@ -12,6 +12,7 @@ fn drop(&mut self) {
 pub fn trans_mono_item<'a, 'clif, 'tcx: 'a, B: Backend + 'static>(
     cx: &mut crate::CodegenCx<'a, 'clif, 'tcx, B>,
     mono_item: MonoItem<'tcx>,
+    linkage: Linkage,
 ) {
     let tcx = cx.tcx;
     match mono_item {
@@ -42,7 +43,7 @@ pub fn trans_mono_item<'a, 'clif, 'tcx: 'a, B: Backend + 'static>(
                 }
             });
 
-            trans_fn(cx, inst);
+            trans_fn(cx, inst, linkage);
         }
         MonoItem::Static(def_id) => {
             crate::constant::codegen_static(&mut cx.ccx, def_id);
@@ -56,6 +57,7 @@ pub fn trans_mono_item<'a, 'clif, 'tcx: 'a, B: Backend + 'static>(
 fn trans_fn<'a, 'clif, 'tcx: 'a, B: Backend + 'static>(
     cx: &mut crate::CodegenCx<'a, 'clif, 'tcx, B>,
     instance: Instance<'tcx>,
+    linkage: Linkage,
 ) {
     let tcx = cx.tcx;
 
@@ -65,7 +67,7 @@ fn trans_fn<'a, 'clif, 'tcx: 'a, B: Backend + 'static>(
     // Step 2. Declare function
     let (name, sig) = get_function_name_and_sig(tcx, instance);
     let func_id = cx.module
-        .declare_function(&name, Linkage::Export, &sig)
+        .declare_function(&name, linkage, &sig)
         .unwrap();
 
     // Step 3. Make FunctionBuilder
index ec916449d57fb1be5a27e5b9a83a8a9d4fff5034..8cbd597fd59be7dd5f74c6933df425f635e3916e 100644 (file)
@@ -393,9 +393,17 @@ fn codegen_mono_items<'a, 'tcx: 'a>(
 ) {
     let mut cx = CodegenCx::new(tcx, module);
     time("codegen mono items", move || {
-        for (mono_item, (_linkage, _vis)) in mono_items {
+        for (mono_item, (linkage, vis)) in mono_items {
             unimpl::try_unimpl(tcx, log, || {
-                base::trans_mono_item(&mut cx, mono_item);
+                let linkage = match (linkage, vis) {
+                    (RLinkage::External, Visibility::Default) => Linkage::Export,
+                    (RLinkage::Internal, Visibility::Default) => Linkage::Local,
+                    // FIXME this should get external linkage, but hidden visibility,
+                    // not internal linkage and default visibility
+                    | (RLinkage::External, Visibility::Hidden) => Linkage::Local,
+                    _ => panic!("{:?} = {:?} {:?}", mono_item, linkage, vis),
+                };
+                base::trans_mono_item(&mut cx, mono_item, linkage);
             });
         }