Fix debug assertion in error code
This commit is contained in:
parent
649b6323cd
commit
619c6055e7
@ -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 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 {
|
let trait_type = match mutability {
|
||||||
hir::Mutability::Mut => self.tcx.mk_imm_ref(region, t_type),
|
hir::Mutability::Mut => self.tcx.mk_imm_ref(region, t_type),
|
||||||
hir::Mutability::Not => self.tcx.mk_mut_ref(region, t_type),
|
hir::Mutability::Not => self.tcx.mk_mut_ref(region, t_type),
|
||||||
|
@ -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
|
||||||
|
}
|
@ -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`.
|
Loading…
Reference in New Issue
Block a user