Code change:
<!-- Thank you for filing a bug report! Please provide a short summary of the bug, along with any information you feel relevant to replicating the bug. --I tried this code: I expected to see this happen: the compiler giving an error and showing a hint that order of the argument are not correct. Instead, this happened: it stucks, waits forever. It happens on both stable and nightly. Might be related to this:
Yeah, this is probably a dupe of that other one. cc
Yes, it's another bug in the same function, but the root cause is different. I will working on the same PR for this issue.

Related discussion:
text: <ins> error[E0061]: this function takes 6 arguments but 7 arguments were supplied --> $DIR/issue-101097.rs:16:5 | LL |     f(C, A, A, A, B, B, C); |     ^ -     -  -  - expected `C`, found `B` |       |     |  | |       |     |  argument of type `A` unexpected |       |     expected `B`, found `A` |       expected `A`, found `C` | note: function defined here --> $DIR/issue-101097.rs:6:4 | LL | fn f( |    ^ LL |     a1: A, |     ----- LL |     a2: A, |     ----- LL |     b1: B, |     ----- LL |     b2: B, |     ----- LL |     c1: C, |     ----- LL |     c2: C, |     ----- help: did you mean | LL |     f(A, A, B, B, C, C); |      ~~~~~~~~~~~~~~~~~~ error[E0308]: arguments to this function are incorrect --> $DIR/issue-101097.rs:17:5 | LL |     f(C, C, A, A, B, B); |     ^ | note: function defined here --> $DIR/issue-101097.rs:6:4 | LL | fn f( |    ^ LL |     a1: A, |     ----- LL |     a2: A, |     ----- LL |     b1: B, |     ----- LL |     b2: B, |     ----- LL |     c1: C, |     ----- LL |     c2: C, |     ----- help: did you mean | LL |     f(A, A, B, B, C, C); |      ~~~~~~~~~~~~~~~~~~ error[E0308]: arguments to this function are incorrect --> $DIR/issue-101097.rs:18:5 | LL |     f(A, A, D, D, B, B); |     ^       -  -  ---- two arguments of type `C` and `C` are missing |             |  | |             |  argument of type `D` unexpected |             argument of type `D` unexpected | note: function defined here --> $DIR/issue-101097.rs:6:4 | LL | fn f( |    ^ LL |     a1: A, |     ----- LL |     a2: A, |     ----- LL |     b1: B, |     ----- LL |     b2: B, |     ----- LL |     c1: C, |     ----- LL |     c2: C, |     ----- help: did you mean | LL |     f(A, A, B, B, /* C */, /* C */); |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0308]: arguments to this function are incorrect --> $DIR/issue-101097.rs:19:5 | LL |     f(C, C, B, B, A, A); |     ^ -  -        -  - expected `C`, found `A` |       |  |        | |       |  |        expected `C`, found `A` |       |  expected `A`, found `C` |       expected `A`, found `C` | note: function defined here --> $DIR/issue-101097.rs:6:4 | LL | fn f( |    ^ LL |     a1: A, |     ----- LL |     a2: A, |     ----- LL |     b1: B, |     ----- LL |     b2: B, |     ----- LL |     c1: C, |     ----- LL |     c2: C, |     ----- help: did you mean | LL |     f(A, A, B, B, C, C); |      ~~~~~~~~~~~~~~~~~~ error[E0308]: arguments to this function are incorrect --> $DIR/issue-101097.rs:20:5 | LL |     f(C, C, A, B, A, A); |     ^ -  -  -     -  - expected `C`, found `A` |       |  |  |     | |       |  |  |     expected `C`, found `A` |       |  |  expected struct `B`, found struct `A` |       |  expected `A`, found `C` |       expected `A`, found `C` | note: function defined here --> $DIR/issue-101097.rs:6:4 | LL | fn f( |    ^ LL |     a1: A, |     ----- LL |     a2: A, |     ----- LL |     b1: B, |     ----- LL |     b2: B, |     ----- LL |     c1: C, |     ----- LL |     c2: C, |     ----- help: did you mean | LL |     f(A, A, /* B */, B, C, C); |      ~~~~~~~~~~~~~~~~~~~~~~~~ error: aborting due to 5 previous errors Some errors have detailed explanations: E0061, E0308. For more information about an error, try `rustc --explain E0061`. </ins>