Skip to content

Commit 39fe991

Browse files
authored
Rollup merge of rust-lang#126137 - Enselic:normalize-generic-arg, r=compiler-errors
tests: Add ui/higher-ranked/trait-bounds/normalize-generic-arg.rs This adds a regression test for an ICE "accidentally" fixed by rust-lang#101947 that does not add a test for this particular case. Closes rust-lang#107564. I have confirmed the added test code fails with `nightly-2023-01-09` (and passes with `nightly-2023-01-10` and of course recent `nightly`).
2 parents 13423be + 1293ef7 commit 39fe991

2 files changed

+39
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
error[E0284]: type annotations needed: cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc <: <T as Trait<'_>>::Assoc`
2+
--> $DIR/rigid-equate-projections-in-higher-ranked-fn-signature.rs:27:50
3+
|
4+
LL | let _: for<'a> fn(<_ as Trait<'a>>::Assoc) = foo::<T>();
5+
| ^^^^^^^^^^ cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc <: <T as Trait<'_>>::Assoc`
6+
7+
error: aborting due to 1 previous error
8+
9+
For more information about this error, try `rustc --explain E0284`.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//@ revisions: current next
2+
//@[current] check-pass
3+
//@[next] compile-flags: -Znext-solver
4+
//@[next] check-fail
5+
//@ ignore-compare-mode-next-solver (explicit revisions)
6+
7+
/// This triggers an ICE with (and without) `--emit metadata` using the old
8+
/// trait solver:
9+
/// ```
10+
/// rustc +nightly-2023-01-09 \
11+
/// tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.rs
12+
/// ```
13+
/// The ICE was unknowingly fixed by
14+
/// <https://github.com/rust-lang/rust/pull/101947> in `nightly-2023-01-10`.
15+
/// This is a regression test for that fixed ICE. For the next solver we simply
16+
/// make sure there is a compiler error.
17+
18+
trait Trait<'a> {
19+
type Assoc;
20+
}
21+
22+
fn foo<T: for<'a> Trait<'a>>() -> for<'a> fn(<T as Trait<'a>>::Assoc) {
23+
todo!()
24+
}
25+
26+
fn bar<T: for<'a> Trait<'a>>() {
27+
let _: for<'a> fn(<_ as Trait<'a>>::Assoc) = foo::<T>(); //[next]~ ERROR type annotations needed
28+
}
29+
30+
fn main() {}

0 commit comments

Comments
 (0)