Skip to content

Commit

Permalink
Fix debug assertion in error code
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewjasper committed May 8, 2020
1 parent 649b632 commit 619c605
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,15 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
}

if let ty::Ref(region, t_type, mutability) = trait_ref.skip_binder().self_ty().kind {
if region.is_late_bound() || t_type.has_escaping_bound_vars() {
// Avoid debug assertion in `mk_obligation_for_def_id`.
//
// If the self type has escaping bound vars then it's not
// going to be the type of an expression, so the suggestion
// probably won't apply anyway.
return;
}

let trait_type = match mutability {
hir::Mutability::Mut => self.tcx.mk_imm_ref(region, t_type),
hir::Mutability::Not => self.tcx.mk_mut_ref(region, t_type),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Regression test for #70813 (this used to trigger a debug assertion)

trait Trait {}

struct S;

impl<'a> Trait for &'a mut S {}

fn foo<X>(_: X)
where
for<'b> &'b X: Trait,
{
}

fn main() {
let s = S;
foo::<S>(s); //~ ERROR the trait bound `for<'b> &'b S: Trait` is not satisfied
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
error[E0277]: the trait bound `for<'b> &'b S: Trait` is not satisfied
--> $DIR/imm-ref-trait-object-literal-bound-regions.rs:17:5
|
LL | fn foo<X>(_: X)
| --- required by a bound in this
LL | where
LL | for<'b> &'b X: Trait,
| ----- required by this bound in `foo`
...
LL | foo::<S>(s);
| ^^^^^^^^ the trait `for<'b> Trait` is not implemented for `&'b S`
|
= help: the following implementations were found:
<&'a mut S as Trait>

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.

0 comments on commit 619c605

Please sign in to comment.