Skip to content

Commit

Permalink
Don't ICE when non-self part of trait goal is constrained in new solver
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Mar 11, 2024
1 parent 6554a56 commit 2a1d4dd
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
4 changes: 3 additions & 1 deletion compiler/rustc_trait_selection/src/solve/assembly/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,9 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {

let goal =
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![];

Expand Down
Original file line number Diff line number Diff line change
@@ -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::<_>();
}
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 2a1d4dd

Please sign in to comment.