Rollup merge of #72714 - JohnTitor:debug-assert, r=nikomatsakis

Fix debug assertion in typeck

Fixes #72410
This commit is contained in:
Manish Goregaokar 2020-07-20 12:30:12 -07:00 committed by GitHub
commit 105cd49554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 1 deletions

View File

@ -1927,7 +1927,7 @@ fn explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericPredicat
let re_root_empty = tcx.lifetimes.re_root_empty;
let predicate = ty::OutlivesPredicate(ty, re_root_empty);
predicates.push((
ty::PredicateKind::TypeOutlives(ty::Binder::dummy(predicate))
ty::PredicateKind::TypeOutlives(ty::Binder::bind(predicate))
.to_predicate(tcx),
span,
));

View File

@ -0,0 +1,18 @@
// Regression test for #72410, this should be used with debug assertion enabled.
// should be fine
pub trait Foo {
fn map()
where
Self: Sized,
for<'a> &'a mut [u8]: ;
}
// should fail
pub trait Bar {
fn map()
where for<'a> &'a mut [dyn Bar]: ;
//~^ ERROR: the trait `Bar` cannot be made into an object
}
fn main() {}

View File

@ -0,0 +1,18 @@
error[E0038]: the trait `Bar` cannot be made into an object
--> $DIR/issue-72410.rs:14:19
|
LL | pub trait Bar {
| --- this trait cannot be made into an object...
LL | fn map()
| --- ...because associated function `map` has no `self` parameter
LL | where for<'a> &'a mut [dyn Bar]: ;
| ^^^^^^^^^^^^^^^^^ the trait `Bar` cannot be made into an object
|
help: consider turning `map` into a method by giving it a `&self` argument or constraining it so it does not apply to trait objects
|
LL | where for<'a> &'a mut [dyn Bar]:, Self: Sized ;
| ^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0038`.