If method call is in Needs::MutPlace context (e.g. *(foo.bar()) = 1;), Needs::MutPlace is propagated to receiver expression foo (see check_method_call).
But then, if autoref to &mut occurs, such Needs (effectively) overwritten in convert_place_derefs_to_mutable. So why Needs is propagated to a receiver in check_method_call? It looks like it just shouldn't.

I made an example when such propagation leads to using index_mut when it does not need and to false-positive E0596.