Change:
Output (): The lifetime name should be given to the second reference in the tuple. modify labels: C-bug A-async-await A-diagnostics A-lifetimes T-compiler
On stable the output is different: Per bisect-rustc, the commit that changed the output is - almost definitely . is there something that can be done to improve this case? <details<summaryBisect output</summarysearched nightlies: from nightly-2020-06-01 to nightly-2020-07-15 regressed nightly: nightly-2020-07-02 searched commits: from to regressed commit: <details<summarybisected with <a href=''cargo-bisect-rustc</av0.5.2</summaryHost triple: x86_64-unknown-linux-gnu Reproduce with: </details
Here's the output with removed: It looks like we're missing the "let's call the lifetime of this reference" note in the case.
The current equivalent of that annotation is the note at the bottom: (see ) I actually ran into this while testing a potential fix for that issue - it would make the output Which still points at the wrong reference.
Are you still planning to work on this?

Discussion:
for ur in self.scc_values.universal_regions_outlived_by(r_scc) { let new_lub = self.universal_region_relations.postdom_upper_bound(lub, ur); debug!("approx_universal_upper_bound: ur={:?} lub={:?} new_lub={:?}", ur, lub, new_lub); <ins> // The upper bound of two non-static regions is static: this // means we know nothing about the relationship between these // two regions. Pick a 'better' one to use when constructing // a diagnostic </ins> if ur != static_r && lub != static_r && new_lub == static_r { <del> lub = std::cmp::min(ur, lub); </del> <ins> // Prefer the region with an `external_name` - this // indicates that the region is early-bound, so working with // it can produce a nicer error. if self.region_definition(ur).external_name.is_some() { lub = ur; } else if self.region_definition(lub).external_name.is_some() { // Leave lub unchanged } else { // If we get here, we don't have any reason to prefer // one region over the other. Just pick the // one with the lower index for now. lub = std::cmp::min(ur, lub); } </ins> } else { lub = new_lub; }

--> $DIR/issue-74072-lifetime-name-annotations.rs:9:5 | LL | pub async fn async_fn(x: &mut i32) -> &i32 { <del> |                                       - let's call the lifetime of this reference `'1` </del> <ins> |                          - let's call the lifetime of this reference `'1` </ins> LL |     let y = &*x; |             --- borrow of `*x` occurs here LL |     *x += 1;

<ins> // edition:2018 // // Regression test for issue #75785 // Tests that we don't point to a confusing named // region when emitting a diagnostic pub async fn async_fn(x: &mut i32) -> (&i32, &i32) { let y = &*x; *x += 1; //~ ERROR cannot assign to (&32, y) } fn main() {} </ins>

<ins> error[E0506]: cannot assign to `*x` because it is borrowed --> $DIR/issue-75785-confusing-named-region.rs:9:5 | LL | pub async fn async_fn(x: &mut i32) -> (&i32, &i32) { |                          - let's call the lifetime of this reference `'1` LL |     let y = &*x; |             --- borrow of `*x` occurs here LL |     *x += 1; |     ^^^^^^^ assignment to borrowed `*x` occurs here LL |     (&32, y) |     -------- returning this value requires that `*x` is borrowed for `'1` error: aborting due to previous error For more information about this error, try `rustc --explain E0506`. </ins>