about summary refs log tree commit diff
path: root/src/librustc_codegen_llvm
diff options
context:
space:
mode:
authorMasaki Hara <ackie.h.gmai@gmail.com>2018-09-11 23:30:16 +0900
committerMasaki Hara <ackie.h.gmai@gmail.com>2018-10-24 21:59:06 +0900
commit1fb085511e61c3d97f020c9d8d28e567f7cb1694 (patch)
tree710ecbcb199eeeeda302f32f52ec8e176eebdacb /src/librustc_codegen_llvm
parentfe3f606cda083aec9564add4f7ff6ed4c4a0fff7 (diff)
downloadrust-1fb085511e61c3d97f020c9d8d28e567f7cb1694.tar.gz
rust-1fb085511e61c3d97f020c9d8d28e567f7cb1694.zip
Make declare_fn aware of vtable shims.
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/callee.rs2
-rw-r--r--src/librustc_codegen_llvm/context.rs2
-rw-r--r--src/librustc_codegen_llvm/declare.rs8
-rw-r--r--src/librustc_codegen_llvm/mono_item.rs2
4 files changed, 8 insertions, 6 deletions
diff --git a/src/librustc_codegen_llvm/callee.rs b/src/librustc_codegen_llvm/callee.rs
index 972cccd5d68..82d85b6ead4 100644
--- a/src/librustc_codegen_llvm/callee.rs
+++ b/src/librustc_codegen_llvm/callee.rs
@@ -91,7 +91,7 @@ pub fn get_fn(
             llfn
         }
     } else {
-        let llfn = declare::declare_fn(cx, &sym, fn_ty);
+        let llfn = declare::declare_fn(cx, &sym, fn_ty, instance.is_vtable_shim());
         assert_eq!(common::val_ty(llfn), llptrty);
         debug!("get_fn: not casting pointer!");
 
diff --git a/src/librustc_codegen_llvm/context.rs b/src/librustc_codegen_llvm/context.rs
index 826df82193a..8087f130afa 100644
--- a/src/librustc_codegen_llvm/context.rs
+++ b/src/librustc_codegen_llvm/context.rs
@@ -412,7 +412,7 @@ impl<'b, 'tcx> CodegenCx<'b, 'tcx> {
             Abi::C
         )));
 
-        let llfn = declare::declare_fn(self, "rust_eh_unwind_resume", ty);
+        let llfn = declare::declare_fn(self, "rust_eh_unwind_resume", ty, false);
         attributes::unwind(llfn, true);
         attributes::apply_target_cpu_attr(self, llfn);
         unwresume.set(Some(llfn));
diff --git a/src/librustc_codegen_llvm/declare.rs b/src/librustc_codegen_llvm/declare.rs
index 26969e24f08..0d01e9ef7dd 100644
--- a/src/librustc_codegen_llvm/declare.rs
+++ b/src/librustc_codegen_llvm/declare.rs
@@ -130,9 +130,11 @@ pub fn declare_fn(
     cx: &CodegenCx<'ll, 'tcx>,
     name: &str,
     fn_type: Ty<'tcx>,
+    is_vtable_shim: bool,
 ) -> &'ll Value {
-    debug!("declare_rust_fn(name={:?}, fn_type={:?})", name, fn_type);
-    let sig = common::ty_fn_sig(cx, fn_type);
+    debug!("declare_rust_fn(name={:?}, fn_type={:?}, is_vtable_shim={:?})",
+           name, fn_type, is_vtable_shim);
+    let sig = common::ty_fn_sig_vtable(cx, fn_type, is_vtable_shim);
     let sig = cx.tcx.normalize_erasing_late_bound_regions(ty::ParamEnv::reveal_all(), &sig);
     debug!("declare_rust_fn (after region erasure) sig={:?}", sig);
 
@@ -189,7 +191,7 @@ pub fn define_fn(
     if get_defined_value(cx, name).is_some() {
         cx.sess().fatal(&format!("symbol `{}` already defined", name))
     } else {
-        declare_fn(cx, name, fn_type)
+        declare_fn(cx, name, fn_type, false)
     }
 }
 
diff --git a/src/librustc_codegen_llvm/mono_item.rs b/src/librustc_codegen_llvm/mono_item.rs
index dab9b147cc0..aab8613b756 100644
--- a/src/librustc_codegen_llvm/mono_item.rs
+++ b/src/librustc_codegen_llvm/mono_item.rs
@@ -155,7 +155,7 @@ fn predefine_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
 
     let mono_ty = instance.ty(cx.tcx);
     let attrs = cx.tcx.codegen_fn_attrs(instance.def_id());
-    let lldecl = declare::declare_fn(cx, symbol_name, mono_ty);
+    let lldecl = declare::declare_fn(cx, symbol_name, mono_ty, instance.is_vtable_shim());
     unsafe { llvm::LLVMRustSetLinkage(lldecl, base::linkage_to_llvm(linkage)) };
     base::set_link_section(lldecl, &attrs);
     if linkage == Linkage::LinkOnceODR ||