File tree 2 files changed +72
-0
lines changed
2 files changed +72
-0
lines changed Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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`.
You can’t perform that action at this time.
0 commit comments