Skip to content

[NLL] loss of span for type outlives errors in closures/async blocks #99245

Closed
@aliemjay

Description

@aliemjay

Given the following code: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=aaf294b9353da9ea4ef76206ed0c0a76

fn test<'a, T>() {
    || {
        None::<&'a T>;
    };
}

The current output is:

error[E0309]: the parameter type `T` may not live long enough
 --> src/lib.rs:2:5
  |
2 | /     || {
3 | |         None::<&'a T>;
4 | |     };
  | |_____^ ...so that the type `T` will meet its required lifetime bounds
  |
help: consider adding an explicit lifetime bound...
  |
1 | fn test<'a, T: 'a>() {
  |              ++++

Ideally the output should look similar to when constraint is generated in the main fn body:

error[E0309]: the parameter type `T` may not live long enough
 --> src/lib.rs:3:9
  |
3 |         None::<&'a T>;
  |         ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
  |
help: consider adding an explicit lifetime bound...
  |
1 | fn test<'a, T: 'a>() {
  |              ++++

@rustbot label A-NLL NLL-diagnostics D-terse regression-from-stable-to-beta

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-NLLArea: Non-lexical lifetimes (NLL)A-diagnosticsArea: Messages for errors, warnings, and lintsD-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.NLL-diagnosticsWorking towards the "diagnostic parity" goalP-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions