about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorchenyukang <moorekang@gmail.com>2022-08-30 10:03:02 +0800
committeryukang <moorekang@gmail.com>2022-09-09 09:51:21 +0800
commit7e7dfb83dc1fe63d1ce14101339f5eee5b76159d (patch)
tree23203ea78337715c40a9da918fd339bdf3ff060a /src
parent50e5d03e16790400f0c5b6ce6d3a27f6a71c5298 (diff)
downloadrust-7e7dfb83dc1fe63d1ce14101339f5eee5b76159d.tar.gz
rust-7e7dfb83dc1fe63d1ce14101339f5eee5b76159d.zip
fix #101097, avoid infinite loop in fn arguments checking
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/argument-suggestions/issue-100478.stderr8
-rw-r--r--src/test/ui/argument-suggestions/issue-101097.rs21
-rw-r--r--src/test/ui/argument-suggestions/issue-101097.stderr160
3 files changed, 185 insertions, 4 deletions
diff --git a/src/test/ui/argument-suggestions/issue-100478.stderr b/src/test/ui/argument-suggestions/issue-100478.stderr
index a77889a9679..df02a312cf1 100644
--- a/src/test/ui/argument-suggestions/issue-100478.stderr
+++ b/src/test/ui/argument-suggestions/issue-100478.stderr
@@ -15,7 +15,7 @@ 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
@@ -35,7 +35,7 @@ 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
@@ -54,7 +54,7 @@ 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
@@ -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
    |
 LL |     foo(p1, /* Arc<T2> */, p3, p4, p5, p6, p7, p8);
-   |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/argument-suggestions/issue-101097.rs b/src/test/ui/argument-suggestions/issue-101097.rs
new file mode 100644
index 00000000000..7994d3cd995
--- /dev/null
+++ b/src/test/ui/argument-suggestions/issue-101097.rs
@@ -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]
+}
diff --git a/src/test/ui/argument-suggestions/issue-101097.stderr b/src/test/ui/argument-suggestions/issue-101097.stderr
new file mode 100644
index 00000000000..096f8c226f2
--- /dev/null
+++ b/src/test/ui/argument-suggestions/issue-101097.stderr
@@ -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`.