about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_typeck/check/mod.rs54
-rw-r--r--src/test/ui/arg-count-mismatch.rs2
-rw-r--r--src/test/ui/arg-count-mismatch.stderr6
-rw-r--r--src/test/ui/c-variadic/variadic-ffi-1.rs4
-rw-r--r--src/test/ui/c-variadic/variadic-ffi-1.stderr12
-rw-r--r--src/test/ui/error-codes/E0057.stderr12
-rw-r--r--src/test/ui/error-codes/E0060.rs2
-rw-r--r--src/test/ui/error-codes/E0060.stderr6
-rw-r--r--src/test/ui/error-codes/E0061.rs4
-rw-r--r--src/test/ui/error-codes/E0061.stderr12
-rw-r--r--src/test/ui/hrtb/issue-58451.rs2
-rw-r--r--src/test/ui/hrtb/issue-58451.stderr6
-rw-r--r--src/test/ui/issues/issue-16939.stderr6
-rw-r--r--src/test/ui/issues/issue-18819.stderr6
-rw-r--r--src/test/ui/issues/issue-26094.rs8
-rw-r--r--src/test/ui/issues/issue-26094.stderr10
-rw-r--r--src/test/ui/issues/issue-3044.rs2
-rw-r--r--src/test/ui/issues/issue-3044.stderr10
-rw-r--r--src/test/ui/issues/issue-4935.rs2
-rw-r--r--src/test/ui/issues/issue-4935.stderr6
-rw-r--r--src/test/ui/methods/method-call-err-msg.rs8
-rw-r--r--src/test/ui/methods/method-call-err-msg.stderr39
-rw-r--r--src/test/ui/mismatched_types/overloaded-calls-bad.rs4
-rw-r--r--src/test/ui/mismatched_types/overloaded-calls-bad.stderr12
-rw-r--r--src/test/ui/not-enough-arguments.rs2
-rw-r--r--src/test/ui/not-enough-arguments.stderr6
-rw-r--r--src/test/ui/resolve/resolve-primitive-fallback.rs2
-rw-r--r--src/test/ui/resolve/resolve-primitive-fallback.stderr6
-rw-r--r--src/test/ui/span/E0057.stderr12
-rw-r--r--src/test/ui/span/issue-34264.stderr12
-rw-r--r--src/test/ui/span/missing-unit-argument.stderr28
-rw-r--r--src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.rs2
-rw-r--r--src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.stderr6
-rw-r--r--src/test/ui/type/type-ascription-instead-of-initializer.rs2
-rw-r--r--src/test/ui/type/type-ascription-instead-of-initializer.stderr6
35 files changed, 214 insertions, 105 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 7e5d27d93b3..d2bef80ac36 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -3761,17 +3761,58 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                                  error_code: &str,
                                  c_variadic: bool,
                                  sugg_unit: bool| {
+            let (span, start_span, args) = match &expr.kind {
+                hir::ExprKind::Call(hir::Expr { span, .. }, args) => (*span, *span, &args[..]),
+                hir::ExprKind::MethodCall(path_segment, span, args) => (
+                    *span,
+                    // `sp` doesn't point at the whole `foo.bar()`, only at `bar`.
+                    path_segment
+                        .args
+                        .and_then(|args| args.args.iter().last())
+                        // Account for `foo.bar::<T>()`.
+                        .map(|arg| {
+                            // Skip the closing `>`.
+                            tcx.sess
+                                .source_map()
+                                .next_point(tcx.sess.source_map().next_point(arg.span()))
+                        })
+                        .unwrap_or(*span),
+                    &args[1..], // Skip the receiver.
+                ),
+                k => span_bug!(sp, "checking argument types on a non-call: `{:?}`", k),
+            };
+            let arg_spans = if args.is_empty() {
+                // foo()
+                // ^^^-- supplied 0 arguments
+                // |
+                // expected 2 arguments
+                vec![tcx.sess.source_map().next_point(start_span).with_hi(sp.hi())]
+            } else {
+                // foo(1, 2, 3)
+                // ^^^ -  -  - supplied 3 arguments
+                // |
+                // expected 2 arguments
+                args.iter().map(|arg| arg.span).collect::<Vec<Span>>()
+            };
+
             let mut err = tcx.sess.struct_span_err_with_code(
-                sp,
+                span,
                 &format!(
                     "this function takes {}{} but {} {} supplied",
                     if c_variadic { "at least " } else { "" },
-                    potentially_plural_count(expected_count, "parameter"),
-                    potentially_plural_count(arg_count, "parameter"),
+                    potentially_plural_count(expected_count, "argument"),
+                    potentially_plural_count(arg_count, "argument"),
                     if arg_count == 1 { "was" } else { "were" }
                 ),
                 DiagnosticId::Error(error_code.to_owned()),
             );
+            let label = format!("supplied {}", potentially_plural_count(arg_count, "argument"));
+            for (i, span) in arg_spans.into_iter().enumerate() {
+                err.span_label(
+                    span,
+                    if arg_count == 0 || i + 1 == arg_count { &label } else { "" },
+                );
+            }
 
             if let Some(def_s) = def_span.map(|sp| tcx.sess.source_map().def_span(sp)) {
                 err.span_label(def_s, "defined here");
@@ -3788,11 +3829,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                 );
             } else {
                 err.span_label(
-                    sp,
+                    span,
                     format!(
                         "expected {}{}",
                         if c_variadic { "at least " } else { "" },
-                        potentially_plural_count(expected_count, "parameter")
+                        potentially_plural_count(expected_count, "argument")
                     ),
                 );
             }
@@ -5494,8 +5535,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
 
         self.tcx.sess.span_err(
             span,
-            "this function can only be invoked \
-                                      directly, not through a function pointer",
+            "this function can only be invoked directly, not through a function pointer",
         );
     }
 
diff --git a/src/test/ui/arg-count-mismatch.rs b/src/test/ui/arg-count-mismatch.rs
index cf7487069c1..18926f5daf7 100644
--- a/src/test/ui/arg-count-mismatch.rs
+++ b/src/test/ui/arg-count-mismatch.rs
@@ -1,4 +1,4 @@
-// error-pattern: parameters were supplied
+// error-pattern: arguments were supplied
 
 fn f(x: isize) { }
 
diff --git a/src/test/ui/arg-count-mismatch.stderr b/src/test/ui/arg-count-mismatch.stderr
index 44f16041363..7bc06134a69 100644
--- a/src/test/ui/arg-count-mismatch.stderr
+++ b/src/test/ui/arg-count-mismatch.stderr
@@ -1,11 +1,13 @@
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/arg-count-mismatch.rs:5:28
    |
 LL | fn f(x: isize) { }
    | -------------- defined here
 LL | 
 LL | fn main() { let i: (); i = f(); }
-   |                            ^^^ expected 1 parameter
+   |                            ^-- supplied 0 arguments
+   |                            |
+   |                            expected 1 argument
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/c-variadic/variadic-ffi-1.rs b/src/test/ui/c-variadic/variadic-ffi-1.rs
index 6a3ff24b674..e7197a9d168 100644
--- a/src/test/ui/c-variadic/variadic-ffi-1.rs
+++ b/src/test/ui/c-variadic/variadic-ffi-1.rs
@@ -13,8 +13,8 @@ extern "C" fn bar(f: isize, x: u8) {}
 
 fn main() {
     unsafe {
-        foo();  //~ ERROR this function takes at least 2 parameters but 0 parameters were supplied
-        foo(1); //~ ERROR this function takes at least 2 parameters but 1 parameter was supplied
+        foo();  //~ ERROR this function takes at least 2 arguments but 0 arguments were supplied
+        foo(1); //~ ERROR this function takes at least 2 arguments but 1 argument was supplied
 
         let x: unsafe extern "C" fn(f: isize, x: u8) = foo; //~ ERROR mismatched types
         let y: extern "C" fn(f: isize, x: u8, ...) = bar; //~ ERROR mismatched types
diff --git a/src/test/ui/c-variadic/variadic-ffi-1.stderr b/src/test/ui/c-variadic/variadic-ffi-1.stderr
index 05d839a0c55..318b8aabafb 100644
--- a/src/test/ui/c-variadic/variadic-ffi-1.stderr
+++ b/src/test/ui/c-variadic/variadic-ffi-1.stderr
@@ -4,23 +4,27 @@ error[E0045]: C-variadic function must have C or cdecl calling convention
 LL |     fn printf(_: *const u8, ...);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C-variadics require C or cdecl calling convention
 
-error[E0060]: this function takes at least 2 parameters but 0 parameters were supplied
+error[E0060]: this function takes at least 2 arguments but 0 arguments were supplied
   --> $DIR/variadic-ffi-1.rs:16:9
    |
 LL |     fn foo(f: isize, x: u8, ...);
    |     ----------------------------- defined here
 ...
 LL |         foo();
-   |         ^^^^^ expected at least 2 parameters
+   |         ^^^-- supplied 0 arguments
+   |         |
+   |         expected at least 2 arguments
 
-error[E0060]: this function takes at least 2 parameters but 1 parameter was supplied
+error[E0060]: this function takes at least 2 arguments but 1 argument was supplied
   --> $DIR/variadic-ffi-1.rs:17:9
    |
 LL |     fn foo(f: isize, x: u8, ...);
    |     ----------------------------- defined here
 ...
 LL |         foo(1);
-   |         ^^^^^^ expected at least 2 parameters
+   |         ^^^ - supplied 1 argument
+   |         |
+   |         expected at least 2 arguments
 
 error[E0308]: mismatched types
   --> $DIR/variadic-ffi-1.rs:19:56
diff --git a/src/test/ui/error-codes/E0057.stderr b/src/test/ui/error-codes/E0057.stderr
index 6b5890cac36..31579e28289 100644
--- a/src/test/ui/error-codes/E0057.stderr
+++ b/src/test/ui/error-codes/E0057.stderr
@@ -1,14 +1,18 @@
-error[E0057]: this function takes 1 parameter but 0 parameters were supplied
+error[E0057]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/E0057.rs:3:13
    |
 LL |     let a = f();
-   |             ^^^ expected 1 parameter
+   |             ^-- supplied 0 arguments
+   |             |
+   |             expected 1 argument
 
-error[E0057]: this function takes 1 parameter but 2 parameters were supplied
+error[E0057]: this function takes 1 argument but 2 arguments were supplied
   --> $DIR/E0057.rs:5:13
    |
 LL |     let c = f(2, 3);
-   |             ^^^^^^^ expected 1 parameter
+   |             ^ -  - supplied 2 arguments
+   |             |
+   |             expected 1 argument
 
 error: aborting due to 2 previous errors
 
diff --git a/src/test/ui/error-codes/E0060.rs b/src/test/ui/error-codes/E0060.rs
index 2bb490fb3ea..941eb2a210b 100644
--- a/src/test/ui/error-codes/E0060.rs
+++ b/src/test/ui/error-codes/E0060.rs
@@ -5,5 +5,5 @@ extern "C" {
 fn main() {
     unsafe { printf(); }
     //~^ ERROR E0060
-    //~| expected at least 1 parameter
+    //~| expected at least 1 argument
 }
diff --git a/src/test/ui/error-codes/E0060.stderr b/src/test/ui/error-codes/E0060.stderr
index 8a2e7d1a72c..a600592c6c2 100644
--- a/src/test/ui/error-codes/E0060.stderr
+++ b/src/test/ui/error-codes/E0060.stderr
@@ -1,11 +1,13 @@
-error[E0060]: this function takes at least 1 parameter but 0 parameters were supplied
+error[E0060]: this function takes at least 1 argument but 0 arguments were supplied
   --> $DIR/E0060.rs:6:14
    |
 LL |     fn printf(_: *const u8, ...) -> u32;
    |     ------------------------------------ defined here
 ...
 LL |     unsafe { printf(); }
-   |              ^^^^^^^^ expected at least 1 parameter
+   |              ^^^^^^-- supplied 0 arguments
+   |              |
+   |              expected at least 1 argument
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/error-codes/E0061.rs b/src/test/ui/error-codes/E0061.rs
index e64ea36ac92..c7b5fe4310e 100644
--- a/src/test/ui/error-codes/E0061.rs
+++ b/src/test/ui/error-codes/E0061.rs
@@ -5,9 +5,9 @@ fn f2(a: u16) {}
 fn main() {
     f(0);
     //~^ ERROR E0061
-    //~| expected 2 parameters
+    //~| expected 2 arguments
 
     f2();
     //~^ ERROR E0061
-    //~| expected 1 parameter
+    //~| expected 1 argument
 }
diff --git a/src/test/ui/error-codes/E0061.stderr b/src/test/ui/error-codes/E0061.stderr
index 73103241f7a..dfefa0df313 100644
--- a/src/test/ui/error-codes/E0061.stderr
+++ b/src/test/ui/error-codes/E0061.stderr
@@ -1,20 +1,24 @@
-error[E0061]: this function takes 2 parameters but 1 parameter was supplied
+error[E0061]: this function takes 2 arguments but 1 argument was supplied
   --> $DIR/E0061.rs:6:5
    |
 LL | fn f(a: u16, b: &str) {}
    | --------------------- defined here
 ...
 LL |     f(0);
-   |     ^^^^ expected 2 parameters
+   |     ^ - supplied 1 argument
+   |     |
+   |     expected 2 arguments
 
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/E0061.rs:10:5
    |
 LL | fn f2(a: u16) {}
    | ------------- defined here
 ...
 LL |     f2();
-   |     ^^^^ expected 1 parameter
+   |     ^^-- supplied 0 arguments
+   |     |
+   |     expected 1 argument
 
 error: aborting due to 2 previous errors
 
diff --git a/src/test/ui/hrtb/issue-58451.rs b/src/test/ui/hrtb/issue-58451.rs
index 229e5057678..f36d549e476 100644
--- a/src/test/ui/hrtb/issue-58451.rs
+++ b/src/test/ui/hrtb/issue-58451.rs
@@ -9,5 +9,5 @@ where
 {}
 
 fn main() {
-    f(&[f()]); //~ ERROR this function takes 1 parameter
+    f(&[f()]); //~ ERROR this function takes 1 argument
 }
diff --git a/src/test/ui/hrtb/issue-58451.stderr b/src/test/ui/hrtb/issue-58451.stderr
index 4648c0182b9..c0915808bf5 100644
--- a/src/test/ui/hrtb/issue-58451.stderr
+++ b/src/test/ui/hrtb/issue-58451.stderr
@@ -1,4 +1,4 @@
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/issue-58451.rs:12:9
    |
 LL | / fn f<I>(i: I)
@@ -9,7 +9,9 @@ LL | | {}
    | |__- defined here
 ...
 LL |       f(&[f()]);
-   |           ^^^ expected 1 parameter
+   |           ^-- supplied 0 arguments
+   |           |
+   |           expected 1 argument
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/issues/issue-16939.stderr b/src/test/ui/issues/issue-16939.stderr
index 5df2119c141..103f56fa04d 100644
--- a/src/test/ui/issues/issue-16939.stderr
+++ b/src/test/ui/issues/issue-16939.stderr
@@ -1,8 +1,10 @@
-error[E0057]: this function takes 0 parameters but 1 parameter was supplied
+error[E0057]: this function takes 0 arguments but 1 argument was supplied
   --> $DIR/issue-16939.rs:5:9
    |
 LL |     |t| f(t);
-   |         ^^^^ expected 0 parameters
+   |         ^ - supplied 1 argument
+   |         |
+   |         expected 0 arguments
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/issues/issue-18819.stderr b/src/test/ui/issues/issue-18819.stderr
index 41e8470ecd0..a952c9b46c9 100644
--- a/src/test/ui/issues/issue-18819.stderr
+++ b/src/test/ui/issues/issue-18819.stderr
@@ -1,11 +1,13 @@
-error[E0061]: this function takes 2 parameters but 1 parameter was supplied
+error[E0061]: this function takes 2 arguments but 1 argument was supplied
   --> $DIR/issue-18819.rs:16:5
    |
 LL | fn print_x(_: &dyn Foo<Item=bool>, extra: &str) {
    | ----------------------------------------------- defined here
 ...
 LL |     print_x(X);
-   |     ^^^^^^^^^^ expected 2 parameters
+   |     ^^^^^^^ - supplied 1 argument
+   |     |
+   |     expected 2 arguments
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/issues/issue-26094.rs b/src/test/ui/issues/issue-26094.rs
index b9433849853..78fb0491d82 100644
--- a/src/test/ui/issues/issue-26094.rs
+++ b/src/test/ui/issues/issue-26094.rs
@@ -1,13 +1,13 @@
 macro_rules! some_macro {
     ($other: expr) => ({
-        $other(None)
-        //~^ this function takes 0 parameters but 1 parameter was supplied
+        $other(None) //~ NOTE supplied 1 argument
     })
 }
 
-fn some_function() {}
+fn some_function() {} //~ NOTE defined here
 
 fn main() {
     some_macro!(some_function);
-    //~^ in this expansion of some_macro!
+    //~^ ERROR this function takes 0 arguments but 1 argument was supplied
+    //~| NOTE expected 0 arguments
 }
diff --git a/src/test/ui/issues/issue-26094.stderr b/src/test/ui/issues/issue-26094.stderr
index 0b5b6d5a750..2038d88bf46 100644
--- a/src/test/ui/issues/issue-26094.stderr
+++ b/src/test/ui/issues/issue-26094.stderr
@@ -1,16 +1,14 @@
-error[E0061]: this function takes 0 parameters but 1 parameter was supplied
-  --> $DIR/issue-26094.rs:3:9
+error[E0061]: this function takes 0 arguments but 1 argument was supplied
+  --> $DIR/issue-26094.rs:10:17
    |
 LL |         $other(None)
-   |         ^^^^^^^^^^^^ expected 0 parameters
+   |                ---- supplied 1 argument
 ...
 LL | fn some_function() {}
    | ------------------ defined here
 ...
 LL |     some_macro!(some_function);
-   |     --------------------------- in this macro invocation
-   |
-   = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
+   |                 ^^^^^^^^^^^^^ expected 0 arguments
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/issues/issue-3044.rs b/src/test/ui/issues/issue-3044.rs
index 26db04b69b4..81d76a90eb0 100644
--- a/src/test/ui/issues/issue-3044.rs
+++ b/src/test/ui/issues/issue-3044.rs
@@ -2,5 +2,5 @@ fn main() {
     let needlesArr: Vec<char> = vec!['a', 'f'];
     needlesArr.iter().fold(|x, y| {
     });
-    //~^^ ERROR this function takes 2 parameters but 1 parameter was supplied
+    //~^^ ERROR this function takes 2 arguments but 1 argument was supplied
 }
diff --git a/src/test/ui/issues/issue-3044.stderr b/src/test/ui/issues/issue-3044.stderr
index 35a85b604b2..d2c010659ed 100644
--- a/src/test/ui/issues/issue-3044.stderr
+++ b/src/test/ui/issues/issue-3044.stderr
@@ -1,8 +1,12 @@
-error[E0061]: this function takes 2 parameters but 1 parameter was supplied
+error[E0061]: this function takes 2 arguments but 1 argument was supplied
   --> $DIR/issue-3044.rs:3:23
    |
-LL |     needlesArr.iter().fold(|x, y| {
-   |                       ^^^^ expected 2 parameters
+LL |       needlesArr.iter().fold(|x, y| {
+   |  _______________________^^^^_-
+   | |                       |
+   | |                       expected 2 arguments
+LL | |     });
+   | |_____- supplied 1 argument
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/issues/issue-4935.rs b/src/test/ui/issues/issue-4935.rs
index 3b258c35682..b342bbb1b8e 100644
--- a/src/test/ui/issues/issue-4935.rs
+++ b/src/test/ui/issues/issue-4935.rs
@@ -3,4 +3,4 @@
 fn foo(a: usize) {}
 //~^ defined here
 fn main() { foo(5, 6) }
-//~^ ERROR this function takes 1 parameter but 2 parameters were supplied
+//~^ ERROR this function takes 1 argument but 2 arguments were supplied
diff --git a/src/test/ui/issues/issue-4935.stderr b/src/test/ui/issues/issue-4935.stderr
index a99581fdca1..0cc686e1cf8 100644
--- a/src/test/ui/issues/issue-4935.stderr
+++ b/src/test/ui/issues/issue-4935.stderr
@@ -1,11 +1,13 @@
-error[E0061]: this function takes 1 parameter but 2 parameters were supplied
+error[E0061]: this function takes 1 argument but 2 arguments were supplied
   --> $DIR/issue-4935.rs:5:13
    |
 LL | fn foo(a: usize) {}
    | ---------------- defined here
 LL |
 LL | fn main() { foo(5, 6) }
-   |             ^^^^^^^^^ expected 1 parameter
+   |             ^^^ -  - supplied 2 arguments
+   |             |
+   |             expected 1 argument
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/methods/method-call-err-msg.rs b/src/test/ui/methods/method-call-err-msg.rs
index 5ff4b412667..9bfacc7babf 100644
--- a/src/test/ui/methods/method-call-err-msg.rs
+++ b/src/test/ui/methods/method-call-err-msg.rs
@@ -5,16 +5,18 @@ impl Foo {
     fn zero(self) -> Foo { self }
     fn one(self, _: isize) -> Foo { self }
     fn two(self, _: isize, _: isize) -> Foo { self }
+    fn three<T>(self, _: T, _: T, _: T) -> Foo { self }
 }
 
 fn main() {
     let x = Foo;
-    x.zero(0)   //~ ERROR this function takes 0 parameters but 1 parameter was supplied
-     .one()     //~ ERROR this function takes 1 parameter but 0 parameters were supplied
-     .two(0);   //~ ERROR this function takes 2 parameters but 1 parameter was supplied
+    x.zero(0)   //~ ERROR this function takes 0 arguments but 1 argument was supplied
+     .one()     //~ ERROR this function takes 1 argument but 0 arguments were supplied
+     .two(0);   //~ ERROR this function takes 2 arguments but 1 argument was supplied
 
     let y = Foo;
     y.zero()
      .take()    //~ ERROR no method named `take` found
      .one(0);
+    y.three::<usize>(); //~ ERROR this function takes 3 arguments but 0 arguments were supplied
 }
diff --git a/src/test/ui/methods/method-call-err-msg.stderr b/src/test/ui/methods/method-call-err-msg.stderr
index 7efdd91708a..ab1ef5b9d5a 100644
--- a/src/test/ui/methods/method-call-err-msg.stderr
+++ b/src/test/ui/methods/method-call-err-msg.stderr
@@ -1,32 +1,38 @@
-error[E0061]: this function takes 0 parameters but 1 parameter was supplied
-  --> $DIR/method-call-err-msg.rs:12:7
+error[E0061]: this function takes 0 arguments but 1 argument was supplied
+  --> $DIR/method-call-err-msg.rs:13:7
    |
 LL |     fn zero(self) -> Foo { self }
    |     -------------------- defined here
 ...
 LL |     x.zero(0)
-   |       ^^^^ expected 0 parameters
+   |       ^^^^ - supplied 1 argument
+   |       |
+   |       expected 0 arguments
 
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
-  --> $DIR/method-call-err-msg.rs:13:7
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
+  --> $DIR/method-call-err-msg.rs:14:7
    |
 LL |     fn one(self, _: isize) -> Foo { self }
    |     ----------------------------- defined here
 ...
 LL |      .one()
-   |       ^^^ expected 1 parameter
+   |       ^^^- supplied 0 arguments
+   |       |
+   |       expected 1 argument
 
-error[E0061]: this function takes 2 parameters but 1 parameter was supplied
-  --> $DIR/method-call-err-msg.rs:14:7
+error[E0061]: this function takes 2 arguments but 1 argument was supplied
+  --> $DIR/method-call-err-msg.rs:15:7
    |
 LL |     fn two(self, _: isize, _: isize) -> Foo { self }
    |     --------------------------------------- defined here
 ...
 LL |      .two(0);
-   |       ^^^ expected 2 parameters
+   |       ^^^ - supplied 1 argument
+   |       |
+   |       expected 2 arguments
 
 error[E0599]: no method named `take` found for struct `Foo` in the current scope
-  --> $DIR/method-call-err-msg.rs:18:7
+  --> $DIR/method-call-err-msg.rs:19:7
    |
 LL | pub struct Foo;
    | --------------- method `take` not found for this
@@ -41,7 +47,18 @@ LL |      .take()
            candidate #1: `std::io::Read`
            candidate #2: `std::iter::Iterator`
 
-error: aborting due to 4 previous errors
+error[E0061]: this function takes 3 arguments but 0 arguments were supplied
+  --> $DIR/method-call-err-msg.rs:21:7
+   |
+LL |     fn three<T>(self, _: T, _: T, _: T) -> Foo { self }
+   |     ------------------------------------------ defined here
+...
+LL |     y.three::<usize>();
+   |       ^^^^^--------- supplied 0 arguments
+   |       |
+   |       expected 3 arguments
+
+error: aborting due to 5 previous errors
 
 Some errors have detailed explanations: E0061, E0599.
 For more information about an error, try `rustc --explain E0061`.
diff --git a/src/test/ui/mismatched_types/overloaded-calls-bad.rs b/src/test/ui/mismatched_types/overloaded-calls-bad.rs
index 73e74a97f06..902a6ec81d6 100644
--- a/src/test/ui/mismatched_types/overloaded-calls-bad.rs
+++ b/src/test/ui/mismatched_types/overloaded-calls-bad.rs
@@ -27,7 +27,7 @@ fn main() {
     };
     let ans = s("what");    //~ ERROR mismatched types
     let ans = s();
-    //~^ ERROR this function takes 1 parameter but 0 parameters were supplied
+    //~^ ERROR this function takes 1 argument but 0 arguments were supplied
     let ans = s("burma", "shave");
-    //~^ ERROR this function takes 1 parameter but 2 parameters were supplied
+    //~^ ERROR this function takes 1 argument but 2 arguments were supplied
 }
diff --git a/src/test/ui/mismatched_types/overloaded-calls-bad.stderr b/src/test/ui/mismatched_types/overloaded-calls-bad.stderr
index 5a5dd056261..706e25529bf 100644
--- a/src/test/ui/mismatched_types/overloaded-calls-bad.stderr
+++ b/src/test/ui/mismatched_types/overloaded-calls-bad.stderr
@@ -4,17 +4,21 @@ error[E0308]: mismatched types
 LL |     let ans = s("what");
    |                 ^^^^^^ expected `isize`, found `&str`
 
-error[E0057]: this function takes 1 parameter but 0 parameters were supplied
+error[E0057]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/overloaded-calls-bad.rs:29:15
    |
 LL |     let ans = s();
-   |               ^^^ expected 1 parameter
+   |               ^-- supplied 0 arguments
+   |               |
+   |               expected 1 argument
 
-error[E0057]: this function takes 1 parameter but 2 parameters were supplied
+error[E0057]: this function takes 1 argument but 2 arguments were supplied
   --> $DIR/overloaded-calls-bad.rs:31:15
    |
 LL |     let ans = s("burma", "shave");
-   |               ^^^^^^^^^^^^^^^^^^^ expected 1 parameter
+   |               ^ -------  ------- supplied 2 arguments
+   |               |
+   |               expected 1 argument
 
 error: aborting due to 3 previous errors
 
diff --git a/src/test/ui/not-enough-arguments.rs b/src/test/ui/not-enough-arguments.rs
index 309283ed7f4..631bb1dd274 100644
--- a/src/test/ui/not-enough-arguments.rs
+++ b/src/test/ui/not-enough-arguments.rs
@@ -8,5 +8,5 @@ fn foo(a: isize, b: isize, c: isize, d:isize) {
 
 fn main() {
   foo(1, 2, 3);
-  //~^ ERROR this function takes 4 parameters but 3
+  //~^ ERROR this function takes 4 arguments but 3
 }
diff --git a/src/test/ui/not-enough-arguments.stderr b/src/test/ui/not-enough-arguments.stderr
index c1ee43ea904..f2b57f71400 100644
--- a/src/test/ui/not-enough-arguments.stderr
+++ b/src/test/ui/not-enough-arguments.stderr
@@ -1,11 +1,13 @@
-error[E0061]: this function takes 4 parameters but 3 parameters were supplied
+error[E0061]: this function takes 4 arguments but 3 arguments were supplied
   --> $DIR/not-enough-arguments.rs:10:3
    |
 LL | fn foo(a: isize, b: isize, c: isize, d:isize) {
    | --------------------------------------------- defined here
 ...
 LL |   foo(1, 2, 3);
-   |   ^^^^^^^^^^^^ expected 4 parameters
+   |   ^^^ -  -  - supplied 3 arguments
+   |   |
+   |   expected 4 arguments
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/resolve/resolve-primitive-fallback.rs b/src/test/ui/resolve/resolve-primitive-fallback.rs
index e5a3d689d23..992bcd7977f 100644
--- a/src/test/ui/resolve/resolve-primitive-fallback.rs
+++ b/src/test/ui/resolve/resolve-primitive-fallback.rs
@@ -2,7 +2,7 @@ fn main() {
     // Make sure primitive type fallback doesn't work in value namespace
     std::mem::size_of(u16);
     //~^ ERROR expected value, found builtin type `u16`
-    //~| ERROR this function takes 0 parameters but 1 parameter was supplied
+    //~| ERROR this function takes 0 arguments but 1 argument was supplied
 
     // Make sure primitive type fallback doesn't work with global paths
     let _: ::u8;
diff --git a/src/test/ui/resolve/resolve-primitive-fallback.stderr b/src/test/ui/resolve/resolve-primitive-fallback.stderr
index 92c2a032983..6d61d2f16ca 100644
--- a/src/test/ui/resolve/resolve-primitive-fallback.stderr
+++ b/src/test/ui/resolve/resolve-primitive-fallback.stderr
@@ -10,11 +10,13 @@ error[E0412]: cannot find type `u8` in the crate root
 LL |     let _: ::u8;
    |              ^^ not found in the crate root
 
-error[E0061]: this function takes 0 parameters but 1 parameter was supplied
+error[E0061]: this function takes 0 arguments but 1 argument was supplied
   --> $DIR/resolve-primitive-fallback.rs:3:5
    |
 LL |     std::mem::size_of(u16);
-   |     ^^^^^^^^^^^^^^^^^^^^^^ expected 0 parameters
+   |     ^^^^^^^^^^^^^^^^^ --- supplied 1 argument
+   |     |
+   |     expected 0 arguments
 
 error: aborting due to 3 previous errors
 
diff --git a/src/test/ui/span/E0057.stderr b/src/test/ui/span/E0057.stderr
index 6b5890cac36..31579e28289 100644
--- a/src/test/ui/span/E0057.stderr
+++ b/src/test/ui/span/E0057.stderr
@@ -1,14 +1,18 @@
-error[E0057]: this function takes 1 parameter but 0 parameters were supplied
+error[E0057]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/E0057.rs:3:13
    |
 LL |     let a = f();
-   |             ^^^ expected 1 parameter
+   |             ^-- supplied 0 arguments
+   |             |
+   |             expected 1 argument
 
-error[E0057]: this function takes 1 parameter but 2 parameters were supplied
+error[E0057]: this function takes 1 argument but 2 arguments were supplied
   --> $DIR/E0057.rs:5:13
    |
 LL |     let c = f(2, 3);
-   |             ^^^^^^^ expected 1 parameter
+   |             ^ -  - supplied 2 arguments
+   |             |
+   |             expected 1 argument
 
 error: aborting due to 2 previous errors
 
diff --git a/src/test/ui/span/issue-34264.stderr b/src/test/ui/span/issue-34264.stderr
index 80a237ac6aa..116f5ddd5b4 100644
--- a/src/test/ui/span/issue-34264.stderr
+++ b/src/test/ui/span/issue-34264.stderr
@@ -50,14 +50,16 @@ help: if this is a type, explicitly ignore the parameter name
 LL | fn bar(_: x, y: usize) {}
    |        ^^^^
 
-error[E0061]: this function takes 2 parameters but 3 parameters were supplied
+error[E0061]: this function takes 2 arguments but 3 arguments were supplied
   --> $DIR/issue-34264.rs:7:5
    |
 LL | fn foo(Option<i32>, String) {}
    | --------------------------- defined here
 ...
 LL |     foo(Some(42), 2, "");
-   |     ^^^^^^^^^^^^^^^^^^^^ expected 2 parameters
+   |     ^^^ --------  -  -- supplied 3 arguments
+   |     |
+   |     expected 2 arguments
 
 error[E0308]: mismatched types
   --> $DIR/issue-34264.rs:8:13
@@ -65,14 +67,16 @@ error[E0308]: mismatched types
 LL |     bar("", "");
    |             ^^ expected `usize`, found `&str`
 
-error[E0061]: this function takes 2 parameters but 3 parameters were supplied
+error[E0061]: this function takes 2 arguments but 3 arguments were supplied
   --> $DIR/issue-34264.rs:10:5
    |
 LL | fn bar(x, y: usize) {}
    | ------------------- defined here
 ...
 LL |     bar(1, 2, 3);
-   |     ^^^^^^^^^^^^ expected 2 parameters
+   |     ^^^ -  -  - supplied 3 arguments
+   |     |
+   |     expected 2 arguments
 
 error: aborting due to 6 previous errors
 
diff --git a/src/test/ui/span/missing-unit-argument.stderr b/src/test/ui/span/missing-unit-argument.stderr
index 90a96e3f174..f6344fba3d3 100644
--- a/src/test/ui/span/missing-unit-argument.stderr
+++ b/src/test/ui/span/missing-unit-argument.stderr
@@ -1,68 +1,72 @@
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/missing-unit-argument.rs:11:33
    |
 LL |     let _: Result<(), String> = Ok();
-   |                                 ^^^^
+   |                                 ^^-- supplied 0 arguments
    |
 help: expected the unit value `()`; create it with empty parentheses
    |
 LL |     let _: Result<(), String> = Ok(());
    |                                    ^^
 
-error[E0061]: this function takes 2 parameters but 0 parameters were supplied
+error[E0061]: this function takes 2 arguments but 0 arguments were supplied
   --> $DIR/missing-unit-argument.rs:12:5
    |
 LL | fn foo(():(), ():()) {}
    | -------------------- defined here
 ...
 LL |     foo();
-   |     ^^^^^ expected 2 parameters
+   |     ^^^-- supplied 0 arguments
+   |     |
+   |     expected 2 arguments
 
-error[E0061]: this function takes 2 parameters but 1 parameter was supplied
+error[E0061]: this function takes 2 arguments but 1 argument was supplied
   --> $DIR/missing-unit-argument.rs:13:5
    |
 LL | fn foo(():(), ():()) {}
    | -------------------- defined here
 ...
 LL |     foo(());
-   |     ^^^^^^^ expected 2 parameters
+   |     ^^^ -- supplied 1 argument
+   |     |
+   |     expected 2 arguments
 
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/missing-unit-argument.rs:14:5
    |
 LL | fn bar(():()) {}
    | ------------- defined here
 ...
 LL |     bar();
-   |     ^^^^^
+   |     ^^^-- supplied 0 arguments
    |
 help: expected the unit value `()`; create it with empty parentheses
    |
 LL |     bar(());
    |         ^^
 
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/missing-unit-argument.rs:15:7
    |
 LL |     fn baz(self, (): ()) { }
    |     -------------------- defined here
 ...
 LL |     S.baz();
-   |       ^^^
+   |       ^^^- supplied 0 arguments
    |
 help: expected the unit value `()`; create it with empty parentheses
    |
 LL |     S.baz(());
    |           ^^
 
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/missing-unit-argument.rs:16:7
    |
 LL |     fn generic<T>(self, _: T) { }
    |     ------------------------- defined here
 ...
 LL |     S.generic::<()>();
-   |       ^^^^^^^
+   |       ^^^^^^^------ supplied 0 arguments
    |
 help: expected the unit value `()`; create it with empty parentheses
    |
diff --git a/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.rs b/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.rs
index fa3e1a35fc2..d012687533b 100644
--- a/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.rs
+++ b/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.rs
@@ -18,6 +18,6 @@ impl E2 {
 }
 
 fn main() {
-    <E>::V(); //~ ERROR this function takes 1 parameter but 0 parameters were supplied
+    <E>::V(); //~ ERROR this function takes 1 argument but 0 arguments were supplied
     let _: u8 = <E2>::V; //~ ERROR mismatched types
 }
diff --git a/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.stderr b/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.stderr
index 95c3a08c04a..46e7dd0c517 100644
--- a/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.stderr
+++ b/src/test/ui/type-alias-enum-variants/enum-variant-priority-higher-than-other-inherent.stderr
@@ -1,11 +1,13 @@
-error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+error[E0061]: this function takes 1 argument but 0 arguments were supplied
   --> $DIR/enum-variant-priority-higher-than-other-inherent.rs:21:5
    |
 LL |     V(u8)
    |     ----- defined here
 ...
 LL |     <E>::V();
-   |     ^^^^^^^^ expected 1 parameter
+   |     ^^^^^^-- supplied 0 arguments
+   |     |
+   |     expected 1 argument
 
 error[E0308]: mismatched types
   --> $DIR/enum-variant-priority-higher-than-other-inherent.rs:22:17
diff --git a/src/test/ui/type/type-ascription-instead-of-initializer.rs b/src/test/ui/type/type-ascription-instead-of-initializer.rs
index aef25250b15..9f9b6f06bbc 100644
--- a/src/test/ui/type/type-ascription-instead-of-initializer.rs
+++ b/src/test/ui/type/type-ascription-instead-of-initializer.rs
@@ -1,4 +1,4 @@
 fn main() {
     let x: Vec::with_capacity(10, 20);  //~ ERROR expected type, found `10`
-    //~^ ERROR this function takes 1 parameter
+    //~^ ERROR this function takes 1 argument
 }
diff --git a/src/test/ui/type/type-ascription-instead-of-initializer.stderr b/src/test/ui/type/type-ascription-instead-of-initializer.stderr
index 3fe676de59d..530f77e5ae9 100644
--- a/src/test/ui/type/type-ascription-instead-of-initializer.stderr
+++ b/src/test/ui/type/type-ascription-instead-of-initializer.stderr
@@ -7,11 +7,13 @@ LL |     let x: Vec::with_capacity(10, 20);
    |         |help: use `=` if you meant to assign
    |         while parsing the type for `x`
 
-error[E0061]: this function takes 1 parameter but 2 parameters were supplied
+error[E0061]: this function takes 1 argument but 2 arguments were supplied
   --> $DIR/type-ascription-instead-of-initializer.rs:2:12
    |
 LL |     let x: Vec::with_capacity(10, 20);
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter
+   |            ^^^^^^^^^^^^^^^^^^ --  -- supplied 2 arguments
+   |            |
+   |            expected 1 argument
 
 error: aborting due to 2 previous errors