diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2019-10-29 20:01:31 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2019-12-03 15:41:43 +0200 |
| commit | 4b68afe257603a61aa2eb8b8eaa394c5e7a246fe (patch) | |
| tree | 8d768d7f493f8cb2772abb7e945ce94109320b46 /src/librustc_codegen_llvm/debuginfo | |
| parent | 5b7d0f389f1ae4177f675a5ac535226ef92027a3 (diff) | |
| download | rust-4b68afe257603a61aa2eb8b8eaa394c5e7a246fe.tar.gz rust-4b68afe257603a61aa2eb8b8eaa394c5e7a246fe.zip | |
rustc_codegen_ssa: use FnAbi::of_instance wherever possible.
Diffstat (limited to 'src/librustc_codegen_llvm/debuginfo')
| -rw-r--r-- | src/librustc_codegen_llvm/debuginfo/mod.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/librustc_codegen_llvm/debuginfo/mod.rs b/src/librustc_codegen_llvm/debuginfo/mod.rs index 7713fe47004..f8aeaa20475 100644 --- a/src/librustc_codegen_llvm/debuginfo/mod.rs +++ b/src/librustc_codegen_llvm/debuginfo/mod.rs @@ -16,7 +16,7 @@ use rustc::hir::CodegenFnAttrFlags; use rustc::hir::def_id::{DefId, CrateNum, LOCAL_CRATE}; use rustc::ty::subst::{SubstsRef, GenericArgKind}; -use crate::abi::Abi; +use crate::abi::{Abi, FnAbi}; use crate::common::CodegenCx; use crate::builder::Builder; use crate::value::Value; @@ -280,7 +280,7 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { fn create_function_debug_context( &self, instance: Instance<'tcx>, - sig: ty::FnSig<'tcx>, + fn_abi: &FnAbi<'tcx, Ty<'tcx>>, llfn: &'ll Value, mir: &mir::Body<'_>, ) -> Option<FunctionDebugContext<&'ll DIScope>> { @@ -308,6 +308,12 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { let file_metadata = file_metadata(self, &loc.file.name, def_id.krate); let function_type_metadata = unsafe { + // FIXME(eddyb) avoid this `Instance::fn_sig` call, by + // rewriting `get_function_signature` to use `fn_abi` instead. + let sig = self.tcx().normalize_erasing_late_bound_regions( + ty::ParamEnv::reveal_all(), + &instance.fn_sig(self.tcx()), + ); let fn_signature = get_function_signature(self, sig); llvm::LLVMRustDIBuilderCreateSubroutineType(DIB(self), file_metadata, fn_signature) }; @@ -338,7 +344,7 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { let mut flags = DIFlags::FlagPrototyped; - if self.layout_of(sig.output()).abi.is_uninhabited() { + if fn_abi.ret.layout.abi.is_uninhabited() { flags |= DIFlags::FlagNoReturn; } @@ -390,6 +396,7 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { return Some(fn_debug_context); + // FIXME(eddyb) rewrite this to be based on `FnAbi` instead of `FnSig`. fn get_function_signature<'ll, 'tcx>( cx: &CodegenCx<'ll, 'tcx>, sig: ty::FnSig<'tcx>, |
