diff options
| author | Masaki Hara <ackie.h.gmai@gmail.com> | 2018-09-11 23:30:16 +0900 |
|---|---|---|
| committer | Masaki Hara <ackie.h.gmai@gmail.com> | 2018-10-24 21:59:06 +0900 |
| commit | 1fb085511e61c3d97f020c9d8d28e567f7cb1694 (patch) | |
| tree | 710ecbcb199eeeeda302f32f52ec8e176eebdacb /src/librustc_codegen_llvm | |
| parent | fe3f606cda083aec9564add4f7ff6ed4c4a0fff7 (diff) | |
| download | rust-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.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/context.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/declare.rs | 8 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mono_item.rs | 2 |
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 || |
