fix #101097, avoid infinite loop in fn arguments checking
This commit is contained in:
parent
50e5d03e16
commit
7e7dfb83dc
@ -236,8 +236,8 @@ fn find_issue(&self) -> Option<Issue> {
|
|||||||
if matches!(c, Compatibility::Compatible) { Some(i) } else { None }
|
if matches!(c, Compatibility::Compatible) { Some(i) } else { None }
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
if compat.len() != 1 {
|
if compat.len() < 1 {
|
||||||
// this could go into multiple slots, don't bother exploring both
|
// try to find a cycle even when this could go into multiple slots, see #101097
|
||||||
is_cycle = false;
|
is_cycle = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ LL | fn three_diff(_a: T1, _b: T2, _c: T3) {}
|
|||||||
help: provide the arguments
|
help: provide the arguments
|
||||||
|
|
|
|
||||||
LL | three_diff(/* T1 */, T2::new(0), /* T3 */);
|
LL | three_diff(/* T1 */, T2::new(0), /* T3 */);
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error[E0308]: arguments to this function are incorrect
|
error[E0308]: arguments to this function are incorrect
|
||||||
--> $DIR/issue-100478.rs:35:5
|
--> $DIR/issue-100478.rs:35:5
|
||||||
@ -35,7 +35,7 @@ LL | fn four_shuffle(_a: T1, _b: T2, _c: T3, _d: T4) {}
|
|||||||
help: did you mean
|
help: did you mean
|
||||||
|
|
|
|
||||||
LL | four_shuffle(T1::default(), T2::default(), T3::default(), T4::default());
|
LL | four_shuffle(T1::default(), T2::default(), T3::default(), T4::default());
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error[E0308]: arguments to this function are incorrect
|
error[E0308]: arguments to this function are incorrect
|
||||||
--> $DIR/issue-100478.rs:36:5
|
--> $DIR/issue-100478.rs:36:5
|
||||||
@ -54,7 +54,7 @@ LL | fn four_shuffle(_a: T1, _b: T2, _c: T3, _d: T4) {}
|
|||||||
help: swap these arguments
|
help: swap these arguments
|
||||||
|
|
|
|
||||||
LL | four_shuffle(T1::default(), T2::default(), T3::default(), /* T4 */);
|
LL | four_shuffle(T1::default(), T2::default(), T3::default(), /* T4 */);
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error[E0061]: this function takes 8 arguments but 7 arguments were supplied
|
error[E0061]: this function takes 8 arguments but 7 arguments were supplied
|
||||||
--> $DIR/issue-100478.rs:47:5
|
--> $DIR/issue-100478.rs:47:5
|
||||||
@ -73,7 +73,7 @@ LL | fn foo(p1: T1, p2: Arc<T2>, p3: T3, p4: Arc<T4>, p5: T5, p6: T6, p7: T7, p8
|
|||||||
help: provide the argument
|
help: provide the argument
|
||||||
|
|
|
|
||||||
LL | foo(p1, /* Arc<T2> */, p3, p4, p5, p6, p7, p8);
|
LL | foo(p1, /* Arc<T2> */, p3, p4, p5, p6, p7, p8);
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
21
src/test/ui/argument-suggestions/issue-101097.rs
Normal file
21
src/test/ui/argument-suggestions/issue-101097.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
struct A;
|
||||||
|
struct B;
|
||||||
|
struct C;
|
||||||
|
struct D;
|
||||||
|
|
||||||
|
fn f(
|
||||||
|
a1: A,
|
||||||
|
a2: A,
|
||||||
|
b1: B,
|
||||||
|
b2: B,
|
||||||
|
c1: C,
|
||||||
|
c2: C,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
f(C, A, A, A, B, B, C); //~ ERROR this function takes 6 arguments but 7 arguments were supplied [E0061]
|
||||||
|
f(C, C, A, A, B, B); //~ ERROR arguments to this function are incorrect [E0308]
|
||||||
|
f(A, A, D, D, B, B); //~ arguments to this function are incorrect [E0308]
|
||||||
|
f(C, C, B, B, A, A); //~ arguments to this function are incorrect [E0308]
|
||||||
|
f(C, C, A, B, A, A); //~ arguments to this function are incorrect [E0308]
|
||||||
|
}
|
160
src/test/ui/argument-suggestions/issue-101097.stderr
Normal file
160
src/test/ui/argument-suggestions/issue-101097.stderr
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
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`.
|
Loading…
Reference in New Issue
Block a user