about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2022-03-16 11:53:31 -0700
committerMichael Goulet <michael@errs.io>2022-03-16 11:56:29 -0700
commitb69b3d041ad7b8679bdc9c32afccfd961a7d28d2 (patch)
tree3172cb5d2cc4c76787d5911589dc242ff3ed6471
parent461e8078010433ff7de2db2aaae8a3cfb0847215 (diff)
downloadrust-b69b3d041ad7b8679bdc9c32afccfd961a7d28d2.tar.gz
rust-b69b3d041ad7b8679bdc9c32afccfd961a7d28d2.zip
erase late-bound regions in dyn projection types for debuginfo
-rw-r--r--compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs3
-rw-r--r--src/test/ui/debuginfo/late-bound-projection.rs7
2 files changed, 9 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs b/compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs
index 4b1563ca3c9..f39f260225e 100644
--- a/compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs
+++ b/compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs
@@ -217,7 +217,8 @@ fn push_debuginfo_type_name<'tcx>(
                 let projection_bounds: SmallVec<[_; 4]> = trait_data
                     .projection_bounds()
                     .map(|bound| {
-                        let ExistentialProjection { item_def_id, term, .. } = bound.skip_binder();
+                        let ExistentialProjection { item_def_id, term, .. } =
+                            tcx.erase_late_bound_regions(bound);
                         // FIXME(associated_const_equality): allow for consts here
                         (item_def_id, term.ty().unwrap())
                     })
diff --git a/src/test/ui/debuginfo/late-bound-projection.rs b/src/test/ui/debuginfo/late-bound-projection.rs
new file mode 100644
index 00000000000..6018078459c
--- /dev/null
+++ b/src/test/ui/debuginfo/late-bound-projection.rs
@@ -0,0 +1,7 @@
+// build-pass
+// compile-flags: -Cdebuginfo=2 --crate-type=rlib
+// Fixes issue #94998
+
+pub trait Trait {}
+
+pub fn run(_: &dyn FnOnce(&()) -> Box<dyn Trait + '_>) {}