Change:
<ins> error[E0061]: this function takes 3 arguments but 1 argument was supplied --> $DIR/issue-100478.rs:34:5 | LL |     three_diff(T2::new(0)); |     ^^^^^^^^^^------------ |               || |               |an argument of type `T1` is missing |               an argument of type `T3` is missing | note: function defined here --> $DIR/issue-100478.rs:30:4 | LL | fn three_diff(_a: T1, _b: T2, _c: T3) {} |    ^^^^^^^^^^ ------  ------  ------ help: provide the arguments | LL |     three_diff(/* T1 */, T2::new(0), /* T3 */); |               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0308]: arguments to this function are incorrect --> $DIR/issue-100478.rs:35:5 | LL |     four_shuffle(T3::default(), T4::default(), T1::default(), T2::default()); |     ^^^^^^^^^^^^ -------------  -------------  -------------  ------------- expected `T4`, found `T2` |                  |              |              | |                  |              |              expected `T3`, found `T1` |                  |              expected `T2`, found `T4` |                  expected `T1`, found `T3` | note: function defined here --> $DIR/issue-100478.rs:31:4 | LL | fn four_shuffle(_a: T1, _b: T2, _c: T3, _d: T4) {} |    ^^^^^^^^^^^^ ------  ------  ------  ------ help: did you mean | LL |     four_shuffle(T1::default(), T2::default(), T3::default(), T4::default()); |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0308]: arguments to this function are incorrect --> $DIR/issue-100478.rs:36:5 | LL |     four_shuffle(T3::default(), T2::default(), T1::default(), T3::default()); |     ^^^^^^^^^^^^ -------------                 -------------  ------------- expected struct `T4`, found struct `T3` |                  |                             | |                  |                             expected `T3`, found `T1` |                  expected `T1`, found `T3` | note: function defined here --> $DIR/issue-100478.rs:31:4 | LL | fn four_shuffle(_a: T1, _b: T2, _c: T3, _d: T4) {} |    ^^^^^^^^^^^^ ------  ------  ------  ------ help: swap these arguments | LL |     four_shuffle(T1::default(), T2::default(), T3::default(), /* T4 */); |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error[E0061]: this function takes 8 arguments but 7 arguments were supplied --> $DIR/issue-100478.rs:47:5 | LL |     foo( |     ^^^ ... LL |         p3, p4, p5, p6, p7, p8, |         -- an argument of type `Arc<T2>` is missing | note: function defined here --> $DIR/issue-100478.rs:29:4 | LL | fn foo(p1: T1, p2: Arc<T2>, p3: T3, p4: Arc<T4>, p5: T5, p6: T6, p7: T7, p8: Arc<T8>) {} |    ^^^ ------  -----------  ------  -----------  ------  ------  ------  ----------- help: provide the argument | LL |     foo(p1, /* Arc<T2> */, p3, p4, p5, p6, p7, p8); |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: aborting due to 4 previous errors Some errors have detailed explanations: E0061, E0308. For more information about an error, try `rustc --explain E0061`. </ins>

Discussion:
<!-- 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.