mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
parent
07a63e6d1f
commit
5923218761
41
src/test/ui/nll/issue-57642-higher-ranked-subtype.rs
Normal file
41
src/test/ui/nll/issue-57642-higher-ranked-subtype.rs
Normal file
@ -0,0 +1,41 @@
|
||||
// Regression test for issue #57642
|
||||
// Tests that we reject a bad higher-ranked subtype
|
||||
// with `#![feature(nll)]`
|
||||
|
||||
#![feature(nll)]
|
||||
|
||||
trait X {
|
||||
type G;
|
||||
fn make_g() -> Self::G;
|
||||
}
|
||||
|
||||
impl<'a> X for fn(&'a ()) {
|
||||
type G = &'a ();
|
||||
|
||||
fn make_g() -> Self::G {
|
||||
&()
|
||||
}
|
||||
}
|
||||
|
||||
trait Y {
|
||||
type F;
|
||||
fn make_f() -> Self::F;
|
||||
}
|
||||
|
||||
impl<T> Y for fn(T) {
|
||||
type F = fn(T);
|
||||
|
||||
fn make_f() -> Self::F {
|
||||
|_| {}
|
||||
}
|
||||
}
|
||||
|
||||
fn higher_ranked_region_has_lost_its_binder() {
|
||||
let x = <fn (&())>::make_g(); //~ ERROR no function
|
||||
}
|
||||
|
||||
fn magical() {
|
||||
let x = <fn (&())>::make_f(); //~ ERROR no function
|
||||
}
|
||||
|
||||
fn main() {}
|
31
src/test/ui/nll/issue-57642-higher-ranked-subtype.stderr
Normal file
31
src/test/ui/nll/issue-57642-higher-ranked-subtype.stderr
Normal file
@ -0,0 +1,31 @@
|
||||
error[E0599]: no function or associated item named `make_g` found for fn pointer `for<'r> fn(&'r ())` in the current scope
|
||||
--> $DIR/issue-57642-higher-ranked-subtype.rs:34:25
|
||||
|
|
||||
LL | let x = <fn (&())>::make_g();
|
||||
| ^^^^^^ function or associated item not found in `for<'r> fn(&'r ())`
|
||||
|
|
||||
= note: the method `make_g` exists but the following trait bounds were not satisfied:
|
||||
`for<'r> fn(&'r ()): X`
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
note: `X` defines an item `make_g`, perhaps you need to implement it
|
||||
--> $DIR/issue-57642-higher-ranked-subtype.rs:7:1
|
||||
|
|
||||
LL | trait X {
|
||||
| ^^^^^^^
|
||||
|
||||
error[E0599]: no function or associated item named `make_f` found for fn pointer `for<'r> fn(&'r ())` in the current scope
|
||||
--> $DIR/issue-57642-higher-ranked-subtype.rs:38:25
|
||||
|
|
||||
LL | let x = <fn (&())>::make_f();
|
||||
| ^^^^^^ function or associated item not found in `for<'r> fn(&'r ())`
|
||||
|
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
note: `Y` defines an item `make_f`, perhaps you need to implement it
|
||||
--> $DIR/issue-57642-higher-ranked-subtype.rs:20:1
|
||||
|
|
||||
LL | trait Y {
|
||||
| ^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0599`.
|
Loading…
Reference in New Issue
Block a user