error[E0412]: cannot find type `C` in this scope
  --> $DIR/issue-109831.rs:4:24
   |
LL | struct A;
   | --------- similarly named struct `A` defined here
...
LL | fn f(b1: B, b2: B, a2: C) {}
   |                        ^
   |
help: a struct with a similar name exists
   |
LL - fn f(b1: B, b2: B, a2: C) {}
LL + fn f(b1: B, b2: B, a2: A) {}
   |
help: you might be missing a type parameter
   |
LL | fn f<C>(b1: B, b2: B, a2: C) {}
   |     +++

error[E0425]: cannot find value `C` in this scope
  --> $DIR/issue-109831.rs:7:16
   |
LL | struct A;
   | --------- similarly named unit struct `A` defined here
...
LL |     f(A, A, B, C);
   |                ^ help: a unit struct with a similar name exists: `A`

error[E0061]: this function takes 3 arguments but 4 arguments were supplied
  --> $DIR/issue-109831.rs:7:5
   |
LL |     f(A, A, B, C);
   |     ^ -  -     - unexpected argument #4
   |       |  |
   |       |  expected `B`, found `A`
   |       expected `B`, found `A`
   |
note: function defined here
  --> $DIR/issue-109831.rs:4:4
   |
LL | fn f(b1: B, b2: B, a2: C) {}
   |    ^ -----  -----
help: remove the extra argument
   |
LL -     f(A, A, B, C);
LL +     f(/* B */, /* B */, B);
   |

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0061, E0412, E0425.
For more information about an error, try `rustc --explain E0061`.
