Skip to content

borrowck: Explain implicit object lifetimes in static calls - #164935

Open
Dnreikronos wants to merge 4 commits into
rust-lang:mainfrom
Dnreikronos:codex/borrowck_explicit_object_lifetime
Open

Dnreikronos wants to merge 4 commits into
rust-lang:mainfrom
Dnreikronos:codex/borrowck_explicit_object_lifetime

Conversation

@Dnreikronos

@Dnreikronos Dnreikronos commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #162882

With &dyn Error, the object lifetime defaults to the borrow's lifetime. Calling is needs a 'static object, but E0521 points at the borrow and makes it look like the reference has to be 'static too. Adding + 'static to the object is enough for the example in the issue.

This suggests &(dyn Error + 'static) for the parameter and explains the implicit lifetime in the same help message, as requested in the issue. I think keeping the reason next to the edit makes the fix much easier to understand. When the trait's bounds supply the lifetime, the message explains that too.

I kept the suggestion to arguments passed directly from parameters. The checks also look at the callee's bounds and the lifetimes in trait arguments, to avoid suggesting an object bound when the borrow itself needs to be 'static or those trait lifetimes don't match. If the edit would make an elided return lifetime ambiguous, the diagnostic gives a note instead.

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Oct 25, 2026
@rustbot

rustbot commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator

r? @folkertdev

rustbot has assigned @folkertdev.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 77 candidates
  • Random selection from 20 candidates

@rust-log-analyzer

This comment has been minimized.

@Dnreikronos
Dnreikronos force-pushed the codex/borrowck_explicit_object_lifetime branch from 25924d9 to 13aef70 Compare October 26, 2026 11:38
@rustbot

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-bors

This comment has been minimized.

An omitted object bound can share the reference's lifetime, so E0521
points at the borrow even when the call requires a static trait object.

Explain the lifetime source when suggesting an explicit object bound.
Check callee bounds and trait lifetime arguments before offering an edit,
and avoid making output lifetime elision ambiguous.
@Dnreikronos
Dnreikronos force-pushed the codex/borrowck_explicit_object_lifetime branch from 08a8141 to 9b983cc Compare October 27, 2026 12:49
@rustbot

rustbot commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bad error message for missing static bounds on &dyn Trait

4 participants