Advice to add bound which implies lifetime equality

The example for this one is very contrived, but consider the output here:

#![allow(unused)]
fn main() {
fn f<'a, 'b>(s: &'a mut &'b mut str) -> &'b str {
    *s
}
}
#![allow(unused)]
fn main() {
  = help: consider adding the following bound: `'a: 'b`
}

With the nested lifetime in the argument, there's already an implied 'b: 'a bound. If you follow the advice and add a 'a: 'b bound, then the two bounds together imply that 'a and 'b are in fact the same lifetime. More clear advice would be to use a single lifetime. Even better advice for this particular example would be to return &'a str instead.

Another possible pitfall of blindly following this advice is ending up with something like this:

#![allow(unused)]
fn main() {
impl Node<'a> {
    fn g<'s: 'a>(&'s mut self) { /* ... */ }
}

That's the &'a mut Node<'a> anti-pattern in disguise! This will probably be unusable and hints at a deeper problem that needs solved.