Add some GATs-related regression tests
This commit is contained in:
parent
46b8e7488e
commit
ebd401bc36
24
src/test/ui/generic-associated-types/issue-88595.rs
Normal file
24
src/test/ui/generic-associated-types/issue-88595.rs
Normal file
@ -0,0 +1,24 @@
|
||||
#![feature(generic_associated_types)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
fn main() {}
|
||||
|
||||
trait A<'a> {
|
||||
type B<'b>: Clone
|
||||
// FIXME(generic_associated_types): Remove one of the below bounds
|
||||
// https://github.com/rust-lang/rust/pull/90678#discussion_r744976085
|
||||
where
|
||||
'a: 'b, Self: 'a, Self: 'b;
|
||||
|
||||
fn a(&'a self) -> Self::B<'a>;
|
||||
}
|
||||
|
||||
struct C;
|
||||
|
||||
impl<'a> A<'a> for C {
|
||||
type B<'b> = impl Clone;
|
||||
//~^ ERROR: lifetime bound not satisfied
|
||||
//~| ERROR: could not find defining uses
|
||||
|
||||
fn a(&'a self) -> Self::B<'a> {} //~ ERROR: non-defining opaque type use in defining scope
|
||||
}
|
40
src/test/ui/generic-associated-types/issue-88595.stderr
Normal file
40
src/test/ui/generic-associated-types/issue-88595.stderr
Normal file
@ -0,0 +1,40 @@
|
||||
error[E0478]: lifetime bound not satisfied
|
||||
--> $DIR/issue-88595.rs:19:5
|
||||
|
|
||||
LL | type B<'b> = impl Clone;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lifetime parameter instantiated with the lifetime `'a` as defined here
|
||||
--> $DIR/issue-88595.rs:18:6
|
||||
|
|
||||
LL | impl<'a> A<'a> for C {
|
||||
| ^^
|
||||
note: but lifetime parameter must outlive the lifetime `'b` as defined here
|
||||
--> $DIR/issue-88595.rs:19:12
|
||||
|
|
||||
LL | type B<'b> = impl Clone;
|
||||
| ^^
|
||||
|
||||
error: non-defining opaque type use in defining scope
|
||||
--> $DIR/issue-88595.rs:23:23
|
||||
|
|
||||
LL | fn a(&'a self) -> Self::B<'a> {}
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
note: lifetime used multiple times
|
||||
--> $DIR/issue-88595.rs:18:6
|
||||
|
|
||||
LL | impl<'a> A<'a> for C {
|
||||
| ^^
|
||||
LL | type B<'b> = impl Clone;
|
||||
| ^^
|
||||
|
||||
error: could not find defining uses
|
||||
--> $DIR/issue-88595.rs:19:18
|
||||
|
|
||||
LL | type B<'b> = impl Clone;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0478`.
|
22
src/test/ui/generic-associated-types/issue-90014.rs
Normal file
22
src/test/ui/generic-associated-types/issue-90014.rs
Normal file
@ -0,0 +1,22 @@
|
||||
// edition:2018
|
||||
|
||||
#![feature(generic_associated_types)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
use std::future::Future;
|
||||
|
||||
trait MakeFut {
|
||||
type Fut<'a> where Self: 'a;
|
||||
fn make_fut<'a>(&'a self) -> Self::Fut<'a>;
|
||||
}
|
||||
|
||||
impl MakeFut for &'_ mut () {
|
||||
type Fut<'a> = impl Future<Output = ()>;
|
||||
//~^ ERROR: the type `&mut ()` does not fulfill the required lifetime
|
||||
|
||||
fn make_fut<'a>(&'a self) -> Self::Fut<'a> {
|
||||
async { () }
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
15
src/test/ui/generic-associated-types/issue-90014.stderr
Normal file
15
src/test/ui/generic-associated-types/issue-90014.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error[E0477]: the type `&mut ()` does not fulfill the required lifetime
|
||||
--> $DIR/issue-90014.rs:14:5
|
||||
|
|
||||
LL | type Fut<'a> = impl Future<Output = ()>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: type must outlive the lifetime `'a` as defined here
|
||||
--> $DIR/issue-90014.rs:14:14
|
||||
|
|
||||
LL | type Fut<'a> = impl Future<Output = ()>;
|
||||
| ^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0477`.
|
Loading…
Reference in New Issue
Block a user