Add a regression test for issue-85113
This commit is contained in:
parent
60f1a2fc4b
commit
c09b699631
2 changed files with 70 additions and 0 deletions
22
src/test/ui/type-alias-impl-trait/issue-85113.rs
Normal file
22
src/test/ui/type-alias-impl-trait/issue-85113.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#![feature(min_type_alias_impl_trait)]
|
||||
#![feature(impl_trait_in_bindings)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
//~^ ERROR: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
//~| ERROR: the type `&'<empty> str` does not fulfill the required lifetime
|
||||
//~| ERROR: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
|
||||
|
||||
trait Output<'a> {}
|
||||
|
||||
impl<'a> Output<'a> for &'a str {}
|
||||
|
||||
fn cool_fn<'a>(arg: &'a str) -> OpaqueOutputImpl<'a> {
|
||||
let out: OpaqueOutputImpl<'a> = arg;
|
||||
arg
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let s = String::from("wassup");
|
||||
cool_fn(&s);
|
||||
}
|
||||
48
src/test/ui/type-alias-impl-trait/issue-85113.stderr
Normal file
48
src/test/ui/type-alias-impl-trait/issue-85113.stderr
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/issue-85113.rs:5:29
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: hidden type `&'<empty> str` captures lifetime smaller than the function body
|
||||
--> $DIR/issue-85113.rs:5:29
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0477]: the type `&'<empty> str` does not fulfill the required lifetime
|
||||
--> $DIR/issue-85113.rs:5:29
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: type must outlive the lifetime `'a` as defined on the item at 5:23
|
||||
--> $DIR/issue-85113.rs:5:23
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^
|
||||
|
||||
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
|
||||
--> $DIR/issue-85113.rs:5:29
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: first, the lifetime cannot outlive the empty lifetime...
|
||||
note: ...but the lifetime must also be valid for the lifetime `'a` as defined on the item at 5:23...
|
||||
--> $DIR/issue-85113.rs:5:23
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^
|
||||
note: ...so that the types are compatible
|
||||
--> $DIR/issue-85113.rs:5:29
|
||||
|
|
||||
LL | type OpaqueOutputImpl<'a> = impl Output<'a> + 'a;
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
= note: expected `Output<'a>`
|
||||
found `Output<'_>`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0477, E0495, E0700.
|
||||
For more information about an error, try `rustc --explain E0477`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue