Skip to content

Add long explanation for E0726 #87655

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion compiler/rustc_error_codes/src/error_codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,7 @@ E0720: include_str!("./error_codes/E0720.md"),
E0722: include_str!("./error_codes/E0722.md"),
E0724: include_str!("./error_codes/E0724.md"),
E0725: include_str!("./error_codes/E0725.md"),
E0726: include_str!("./error_codes/E0726.md"),
E0727: include_str!("./error_codes/E0727.md"),
E0728: include_str!("./error_codes/E0728.md"),
E0729: include_str!("./error_codes/E0729.md"),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to remove E0725 from the list of error codes from below (it's not supposed to be declared twice in this file).

Expand Down Expand Up @@ -639,7 +640,6 @@ E0785: include_str!("./error_codes/E0785.md"),
E0717, // rustc_promotable without stability attribute
// E0721, // `await` keyword
// E0723, unstable feature in `const` context
E0726, // non-explicit (not `'_`) elided lifetime in unsupported position
// E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`.
E0772, // `'static' obligation coming from `impl dyn Trait {}` or `impl Foo for dyn Bar {}`.
}
43 changes: 43 additions & 0 deletions compiler/rustc_error_codes/src/error_codes/E0726.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
An argument lifetime was elided in an async function.

When a struct or a type is bound/declared with a lifetime it is important for
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please write a short summary of the error here, the explanation goes below. :)

Something like "An argument's lifetime was elided in an async function".

the Rust compiler to know, on usage, the lifespan of the type. When the
lifetime is not explicitly mentioned and the Rust Compiler cannot determine
the lifetime of your type the following error occurs.

Erroneous code example:

```compile_fail,E0726
use futures::executor::block_on;

struct Content<'a> {
title: &'a str,
body: &'a str,
}

async fn create(content: Content) { // error: implicit elided
// lifetime not allowed here
println!("title: {}", content.title);
println!("body: {}", content.body);
}

let content = Content{ title: "Rust", body: "is great!" };
let future = create(content);
block_on(future);
```

Specify desired lifetime of parameter `content` or indicate the anonymous
lifetime like `content: Content<'_>`. The anonymous lifetime tells the Rust
compiler that `content` is only needed until create function is done with
it's execution.

The `implicit elision` meaning the omission of suggested lifetime that is
`pub async fn create<'a>(content: Content<'a>) {}` is not allowed here as
lifetime of the `content` can differ from current context.

Know more about lifetime elision in this
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a working version of your example above.

[chapter][lifetime-elision] and a chapter on lifetimes can be found
[here][lifetimes].

[lifetime-elision]: https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision
[lifetimes]: https://doc.rust-lang.org/rust-by-example/scope/lifetime.html
1 change: 1 addition & 0 deletions src/test/ui/async-await/async-fn-path-elision.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ LL | async fn error(lt: HasLifetime) {

error: aborting due to previous error

For more information about this error, try `rustc --explain E0726`.
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ LL | impl MyTrait for Foo {

error: aborting due to previous error

For more information about this error, try `rustc --explain E0726`.
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ LL | impl MyTrait for u32 {

error: aborting due to previous error

For more information about this error, try `rustc --explain E0726`.
1 change: 1 addition & 0 deletions src/test/ui/issues/issue-10412.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ LL | trait Serializable<'self, T: ?Sized> {

error: aborting due to 9 previous errors

Some errors have detailed explanations: E0726.
For more information about this error, try `rustc --explain E0277`.
1 change: 1 addition & 0 deletions src/test/ui/wf/wf-in-foreign-fn-decls-issue-80468.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ LL | impl Trait for Ref {}

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0726`.