diff options
| -rw-r--r-- | tests/ui/type-alias-impl-trait/hkl_forbidden.rs | 39 | ||||
| -rw-r--r-- | tests/ui/type-alias-impl-trait/hkl_forbidden.stderr | 48 | ||||
| -rw-r--r-- | tests/ui/type-alias-impl-trait/hkl_forbidden2.rs | 18 | ||||
| -rw-r--r-- | tests/ui/type-alias-impl-trait/hkl_forbidden2.stderr | 5 | ||||
| -rw-r--r-- | tests/ui/type-alias-impl-trait/hkl_forbidden3.rs | 13 | ||||
| -rw-r--r-- | tests/ui/type-alias-impl-trait/hkl_forbidden3.stderr | 15 |
6 files changed, 138 insertions, 0 deletions
diff --git a/tests/ui/type-alias-impl-trait/hkl_forbidden.rs b/tests/ui/type-alias-impl-trait/hkl_forbidden.rs new file mode 100644 index 00000000000..c6d1202ef85 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/hkl_forbidden.rs @@ -0,0 +1,39 @@ +#![feature(type_alias_impl_trait)] + +fn id(s: &str) -> &str { + s +} + +type Opaque<'a> = impl Sized + 'a; + +fn test(s: &str) -> (impl Fn(&str) -> Opaque<'_>, impl Fn(&str) -> Opaque<'_>) { + (id, id) //~ ERROR expected generic lifetime parameter, found `'_` +} + +fn id2<'a, 'b>(s: (&'a str, &'b str)) -> (&'a str, &'b str) { + s +} + +type Opaque2<'a> = impl Sized + 'a; + +fn test2() -> impl for<'a, 'b> Fn((&'a str, &'b str)) -> (Opaque2<'a>, Opaque2<'b>) { + id2 //~ ERROR expected generic lifetime parameter, found `'a` +} + +type Opaque3<'a> = impl Sized + 'a; + +fn test3(s: &str) -> (impl Fn(&str) -> Opaque3<'_>, Opaque3<'_>) { + (id, s) //~ ERROR expected generic lifetime parameter, found `'_` +} + +type Opaque4<'a> = impl Sized + 'a; +fn test4(s: &str) -> (Opaque4<'_>, impl Fn(&str) -> Opaque4<'_>) { + (s, id) //~ ERROR expected generic lifetime parameter, found `'_` +} + +type Inner<'a> = impl Sized; +fn outer_impl() -> impl for<'a> Fn(&'a ()) -> Inner<'a> { + |x| x //~ ERROR expected generic lifetime parameter, found `'a` +} + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/hkl_forbidden.stderr b/tests/ui/type-alias-impl-trait/hkl_forbidden.stderr new file mode 100644 index 00000000000..d49be73d94e --- /dev/null +++ b/tests/ui/type-alias-impl-trait/hkl_forbidden.stderr @@ -0,0 +1,48 @@ +error[E0792]: expected generic lifetime parameter, found `'_` + --> $DIR/hkl_forbidden.rs:10:5 + | +LL | type Opaque<'a> = impl Sized + 'a; + | -- this generic parameter must be used with a generic lifetime parameter +... +LL | (id, id) + | ^^^^^^^^ + +error[E0792]: expected generic lifetime parameter, found `'a` + --> $DIR/hkl_forbidden.rs:20:5 + | +LL | type Opaque2<'a> = impl Sized + 'a; + | -- this generic parameter must be used with a generic lifetime parameter +... +LL | id2 + | ^^^ + +error[E0792]: expected generic lifetime parameter, found `'_` + --> $DIR/hkl_forbidden.rs:26:5 + | +LL | type Opaque3<'a> = impl Sized + 'a; + | -- this generic parameter must be used with a generic lifetime parameter +... +LL | (id, s) + | ^^^^^^^ + +error[E0792]: expected generic lifetime parameter, found `'_` + --> $DIR/hkl_forbidden.rs:31:5 + | +LL | type Opaque4<'a> = impl Sized + 'a; + | -- this generic parameter must be used with a generic lifetime parameter +LL | fn test4(s: &str) -> (Opaque4<'_>, impl Fn(&str) -> Opaque4<'_>) { +LL | (s, id) + | ^^^^^^^ + +error[E0792]: expected generic lifetime parameter, found `'a` + --> $DIR/hkl_forbidden.rs:36:5 + | +LL | type Inner<'a> = impl Sized; + | -- this generic parameter must be used with a generic lifetime parameter +LL | fn outer_impl() -> impl for<'a> Fn(&'a ()) -> Inner<'a> { +LL | |x| x + | ^^^^^ + +error: aborting due to 5 previous errors + +For more information about this error, try `rustc --explain E0792`. diff --git a/tests/ui/type-alias-impl-trait/hkl_forbidden2.rs b/tests/ui/type-alias-impl-trait/hkl_forbidden2.rs new file mode 100644 index 00000000000..69493f0855f --- /dev/null +++ b/tests/ui/type-alias-impl-trait/hkl_forbidden2.rs @@ -0,0 +1,18 @@ +#![feature(type_alias_impl_trait)] +//~^ ERROR: expected generic lifetime parameter, found `'a` + +type Opaque<'a> = impl Sized + 'a; + +trait Trait<'a> { + type Assoc; +} + +impl<'a> Trait<'a> for () { + type Assoc = (); +} + +fn test() -> &'static dyn for<'a> Trait<'a, Assoc = Opaque<'a>> { + &() +} + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/hkl_forbidden2.stderr b/tests/ui/type-alias-impl-trait/hkl_forbidden2.stderr new file mode 100644 index 00000000000..ed0b2085c88 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/hkl_forbidden2.stderr @@ -0,0 +1,5 @@ +error[E0792]: expected generic lifetime parameter, found `'a` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0792`. diff --git a/tests/ui/type-alias-impl-trait/hkl_forbidden3.rs b/tests/ui/type-alias-impl-trait/hkl_forbidden3.rs new file mode 100644 index 00000000000..a4148599f77 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/hkl_forbidden3.rs @@ -0,0 +1,13 @@ +#![feature(type_alias_impl_trait)] + +type Opaque<'a> = impl Sized + 'a; + +fn foo<'a>(x: &'a ()) -> &'a () { + x +} + +fn test() -> for<'a> fn(&'a ()) -> Opaque<'a> { + foo //~ ERROR: mismatched types +} + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/hkl_forbidden3.stderr b/tests/ui/type-alias-impl-trait/hkl_forbidden3.stderr new file mode 100644 index 00000000000..d262177a86b --- /dev/null +++ b/tests/ui/type-alias-impl-trait/hkl_forbidden3.stderr @@ -0,0 +1,15 @@ +error[E0308]: mismatched types + --> $DIR/hkl_forbidden3.rs:10:5 + | +LL | type Opaque<'a> = impl Sized + 'a; + | --------------- the expected opaque type +... +LL | foo + | ^^^ one type is more general than the other + | + = note: expected fn pointer `for<'a> fn(&'a ()) -> Opaque<'a>` + found fn pointer `for<'a> fn(&'a ()) -> &'a ()` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0308`. |
