Use the right binder for rebinding PolyTraitRef
This commit is contained in:
parent
ef148cd7eb
commit
88193aad72
2 changed files with 20 additions and 2 deletions
|
@ -47,11 +47,11 @@ pub fn expand_trait_aliases<'tcx>(
|
||||||
queue.extend(
|
queue.extend(
|
||||||
tcx.explicit_super_predicates_of(trait_pred.def_id())
|
tcx.explicit_super_predicates_of(trait_pred.def_id())
|
||||||
.iter_identity_copied()
|
.iter_identity_copied()
|
||||||
.map(|(clause, span)| {
|
.map(|(super_clause, span)| {
|
||||||
let mut spans = spans.clone();
|
let mut spans = spans.clone();
|
||||||
spans.push(span);
|
spans.push(span);
|
||||||
(
|
(
|
||||||
clause.instantiate_supertrait(
|
super_clause.instantiate_supertrait(
|
||||||
tcx,
|
tcx,
|
||||||
clause.kind().rebind(trait_pred.trait_ref),
|
clause.kind().rebind(trait_pred.trait_ref),
|
||||||
),
|
),
|
||||||
|
|
18
tests/ui/traits/alias/expand-higher-ranked-alias.rs
Normal file
18
tests/ui/traits/alias/expand-higher-ranked-alias.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Make sure we are using the right binder vars when expanding
|
||||||
|
// `for<'a> Foo<'a>` to `for<'a> Bar<'a>`.
|
||||||
|
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
#![feature(trait_alias)]
|
||||||
|
|
||||||
|
trait Bar<'a> {}
|
||||||
|
|
||||||
|
trait Foo<'a> = Bar<'a>;
|
||||||
|
|
||||||
|
fn test2(_: &(impl for<'a> Foo<'a> + ?Sized)) {}
|
||||||
|
|
||||||
|
fn test(x: &dyn for<'a> Foo<'a>) {
|
||||||
|
test2(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue