about summary refs log tree commit diff
path: root/src/librustc_codegen_llvm/debuginfo
diff options
context:
space:
mode:
authorEduard-Mihai Burtescu <edy.burt@gmail.com>2019-10-29 20:01:31 +0200
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2019-12-03 15:41:43 +0200
commit4b68afe257603a61aa2eb8b8eaa394c5e7a246fe (patch)
tree8d768d7f493f8cb2772abb7e945ce94109320b46 /src/librustc_codegen_llvm/debuginfo
parent5b7d0f389f1ae4177f675a5ac535226ef92027a3 (diff)
downloadrust-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.rs13
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>,