Skip to content

Commit 9d7db48

Browse files
authored
Rollup merge of rust-lang#78298 - Aaron1011:fix/nll-ranked-test, r=Mark-Simulacrum
Add test for bad NLL higher-ranked subtype Fixes rust-lang#57642
2 parents f3c9437 + 5923218 commit 9d7db48

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Regression test for issue #57642
2+
// Tests that we reject a bad higher-ranked subtype
3+
// with `#![feature(nll)]`
4+
5+
#![feature(nll)]
6+
7+
trait X {
8+
type G;
9+
fn make_g() -> Self::G;
10+
}
11+
12+
impl<'a> X for fn(&'a ()) {
13+
type G = &'a ();
14+
15+
fn make_g() -> Self::G {
16+
&()
17+
}
18+
}
19+
20+
trait Y {
21+
type F;
22+
fn make_f() -> Self::F;
23+
}
24+
25+
impl<T> Y for fn(T) {
26+
type F = fn(T);
27+
28+
fn make_f() -> Self::F {
29+
|_| {}
30+
}
31+
}
32+
33+
fn higher_ranked_region_has_lost_its_binder() {
34+
let x = <fn (&())>::make_g(); //~ ERROR no function
35+
}
36+
37+
fn magical() {
38+
let x = <fn (&())>::make_f(); //~ ERROR no function
39+
}
40+
41+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
error[E0599]: no function or associated item named `make_g` found for fn pointer `for<'r> fn(&'r ())` in the current scope
2+
--> $DIR/issue-57642-higher-ranked-subtype.rs:34:25
3+
|
4+
LL | let x = <fn (&())>::make_g();
5+
| ^^^^^^ function or associated item not found in `for<'r> fn(&'r ())`
6+
|
7+
= note: the method `make_g` exists but the following trait bounds were not satisfied:
8+
`for<'r> fn(&'r ()): X`
9+
= help: items from traits can only be used if the trait is implemented and in scope
10+
note: `X` defines an item `make_g`, perhaps you need to implement it
11+
--> $DIR/issue-57642-higher-ranked-subtype.rs:7:1
12+
|
13+
LL | trait X {
14+
| ^^^^^^^
15+
16+
error[E0599]: no function or associated item named `make_f` found for fn pointer `for<'r> fn(&'r ())` in the current scope
17+
--> $DIR/issue-57642-higher-ranked-subtype.rs:38:25
18+
|
19+
LL | let x = <fn (&())>::make_f();
20+
| ^^^^^^ function or associated item not found in `for<'r> fn(&'r ())`
21+
|
22+
= help: items from traits can only be used if the trait is implemented and in scope
23+
note: `Y` defines an item `make_f`, perhaps you need to implement it
24+
--> $DIR/issue-57642-higher-ranked-subtype.rs:20:1
25+
|
26+
LL | trait Y {
27+
| ^^^^^^^
28+
29+
error: aborting due to 2 previous errors
30+
31+
For more information about this error, try `rustc --explain E0599`.

0 commit comments

Comments
 (0)