Repository: rust
Issue: Error message ascii art pointer / arrow points to wrong argument
Labels: A-diagnostics,T-compiler

Given the following code: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=8b21d823468da1cb8ba7442d8b4e0e85

```rust
fn foo(x: u32, a: impl Into<String>, y: u32, b: impl Into<String>) {
    println!("fox: a={}, b={}", a.into(), b.into());
}

fn main() {
    let bar: String = "bar".to_string();
    let baz: &str = "baz";

    for (a, b) in &[(&bar, baz)] {
        let a: &String = a;
        foo(42, a, 43, b);
    }
}
```

The current output is:

```
/Users/mkm/.cargo/bin/cargo play --cargo-option=--color=always /var/folders/zp/pk0v2q4x39z43k91vst1_jsc0000gn/T/scratch.rs
   Compiling p3ofvf9avhdc8sbzh9blgjf7wwnoz v0.1.0 (/var/folders/zp/pk0v2q4x39z43k91vst1_jsc0000gn/T/cargo-play.3oFVf9AvHdC8sbzH9BLGJf7wwnoz)
error[E0277]: the trait bound `String: From<&&str>` is not satisfied
  --> src/main.rs:11:17
   |
1  | fn foo(x: u32, a: impl Into<String>, y: u32, b: impl Into<String>) {
   |                                                      ------------ required by this bound in `foo`
...
11 |         foo(42, a, 43, b);
   |                 ^ the trait `From<&&str>` is not implemented for `String`
   |
   = help: the following implementations were found:
             <String as From<&String>>
             <String as From<&mut str>>
             <String as From<&str>>
             <String as From<Box<str>>>
           and 2 others
   = note: required because of the requirements on the impl of `Into<String>` for `&&str`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `p3ofvf9avhdc8sbzh9blgjf7wwnoz`

To learn more, run the command again with --verbose.

```

Ideally the output should look like:

```
/Users/mkm/.cargo/bin/cargo play --cargo-option=--color=always /var/folders/zp/pk0v2q4x39z43k91vst1_jsc0000gn/T/scratch.rs
   Compiling p3ofvf9avhdc8sbzh9blgjf7wwnoz v0.1.0 (/var/folders/zp/pk0v2q4x39z43k91vst1_jsc0000gn/T/cargo-play.3oFVf9AvHdC8sbzH9BLGJf7wwnoz)
error[E0277]: the trait bound `String: From<&&str>` is not satisfied
  --> src/main.rs:11:17
   |
1  | fn foo(x: u32, a: impl Into<String>, y: u32, b: impl Into<String>) {
   |                                                      ------------ required by this bound in `foo`
...
11 |         foo(42, a, 43, b);
   |                        ^ the trait `From<&&str>` is not implemented for `String`
   |
   = help: the following implementations were found:
             <String as From<&String>>
             <String as From<&mut str>>
             <String as From<&str>>
             <String as From<Box<str>>>
           and 2 others
   = note: required because of the requirements on the impl of `Into<String>` for `&&str`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `p3ofvf9avhdc8sbzh9blgjf7wwnoz`

To learn more, run the command again with --verbose.
```

I tried on stable (1.52.1) , beta and nightly (on rust playground and locally).

It seems to confuse only when there are multiple arguments of the same type (e.g. the `impl Into<String>` here.
I didn't try with other types.