Don't ICE when non-self part of trait goal is constrained in new solver
This commit is contained in:
parent
6554a5645a
commit
2a1d4dd6e3
@ -274,7 +274,9 @@ pub(super) fn assemble_and_evaluate_candidates<G: GoalKind<'tcx>>(
|
|||||||
|
|
||||||
let goal =
|
let goal =
|
||||||
goal.with(self.tcx(), goal.predicate.with_self_ty(self.tcx(), normalized_self_ty));
|
goal.with(self.tcx(), goal.predicate.with_self_ty(self.tcx(), normalized_self_ty));
|
||||||
debug_assert_eq!(goal, self.resolve_vars_if_possible(goal));
|
// Vars that show up in the rest of the goal substs may have been constrained by
|
||||||
|
// normalizing the self type as well, since type variables are not uniquified.
|
||||||
|
let goal = self.resolve_vars_if_possible(goal);
|
||||||
|
|
||||||
let mut candidates = vec![];
|
let mut candidates = vec![];
|
||||||
|
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
// This goal is also possible w/ a GAT, but lazy_type_alias
|
||||||
|
// makes the behavior a bit more readable.
|
||||||
|
#![feature(lazy_type_alias)]
|
||||||
|
//~^ WARN the feature `lazy_type_alias` is incomplete
|
||||||
|
|
||||||
|
struct Wr<T>(T);
|
||||||
|
trait Foo {}
|
||||||
|
impl Foo for Wr<i32> {}
|
||||||
|
|
||||||
|
type Alias<T> = (T,)
|
||||||
|
where Wr<T>: Foo;
|
||||||
|
|
||||||
|
fn hello<T>() where Alias<T>: Into<(T,)>, Wr<T>: Foo {}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// When calling `hello`, proving `Alias<?0>: Into<(?0,)>` will require
|
||||||
|
// normalizing the self type of the goal. This will emit the where
|
||||||
|
// clause `Wr<?0>: Foo`, which constrains `?0` in both the self type
|
||||||
|
// *and* the non-self part of the goal. That used to trigger a debug
|
||||||
|
// assertion.
|
||||||
|
hello::<_>();
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
warning: the feature `lazy_type_alias` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||||
|
--> $DIR/normalize-self-type-constrains-trait-args.rs:5:12
|
||||||
|
|
|
||||||
|
LL | #![feature(lazy_type_alias)]
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #112792 <https://github.com/rust-lang/rust/issues/112792> for more information
|
||||||
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
Loading…
Reference in New Issue
Block a user