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
3 changed files with 37 additions and 1 deletions
+1 -1
View File
@@ -1927,7 +1927,7 @@ fn extend<I: IntoIterator<Item = (ty::Predicate<'tcx>, Span)>>(&mut self, iter:
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,
));
+18
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() {}
+18
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`.