-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a regression test for issue-85113
- Loading branch information
Showing
2 changed files
with
70 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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`. |