about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTyler Mandry <tmandry@gmail.com>2019-11-01 11:20:24 -0700
committerGitHub <noreply@github.com>2019-11-01 11:20:24 -0700
commit1ea66850af013e03295c1ad5e46802dfea4a53bd (patch)
treede8ed72e3ebde10d8027b566086eacca32671f4a
parent959a5638031875cda1603a8fd92518753016d51d (diff)
parentfcbf77ef161435705fb47f63bad5e9d9e54a6980 (diff)
downloadrust-1ea66850af013e03295c1ad5e46802dfea4a53bd.tar.gz
rust-1ea66850af013e03295c1ad5e46802dfea4a53bd.zip
Rollup merge of #65995 - GuillaumeGomez:add-err-code-E0743, r=estebank
Add error code E0743 for "C-variadic has been used on a non-foreign function"

Fixes https://github.com/rust-lang/rust/issues/65967
-rw-r--r--src/libsyntax/error_codes.rs15
-rw-r--r--src/libsyntax/parse/parser/ty.rs7
-rw-r--r--src/test/ui/invalid/invalid-variadic-function.stderr3
-rw-r--r--src/test/ui/parser/variadic-ffi-3.stderr3
-rw-r--r--src/test/ui/parser/variadic-ffi-4.stderr3
5 files changed, 25 insertions, 6 deletions
diff --git a/src/libsyntax/error_codes.rs b/src/libsyntax/error_codes.rs
index 17ea4767520..941df5ea570 100644
--- a/src/libsyntax/error_codes.rs
+++ b/src/libsyntax/error_codes.rs
@@ -487,7 +487,6 @@ Erroneous code example:
                                // `test_2018_feature` is
                                // included in the Rust 2018 edition
 ```
-
 "##,
 
 E0725: r##"
@@ -505,6 +504,20 @@ Delete the offending feature attribute, or add it to the list of allowed
 features in the `-Z allow_features` flag.
 "##,
 
+E0743: r##"
+C-variadic has been used on a non-foreign function.
+
+Erroneous code example:
+
+```compile_fail,E0743
+fn foo2(x: u8, ...) {} // error!
+```
+
+Only foreign functions can use C-variadic (`...`). It is used to give an
+undefined number of parameters to a given function (like `printf` in C). The
+equivalent in Rust would be to use macros directly.
+"##,
+
 ;
 
     E0539, // incorrect meta item
diff --git a/src/libsyntax/parse/parser/ty.rs b/src/libsyntax/parse/parser/ty.rs
index 86c94b680b2..e8f718a2483 100644
--- a/src/libsyntax/parse/parser/ty.rs
+++ b/src/libsyntax/parse/parser/ty.rs
@@ -197,8 +197,11 @@ impl<'a> Parser<'a> {
                 self.eat(&token::DotDotDot);
                 TyKind::CVarArgs
             } else {
-                return Err(self.fatal(
-                    "only foreign functions are allowed to be C-variadic"
+                return Err(struct_span_fatal!(
+                    self.sess.span_diagnostic,
+                    self.token.span,
+                    E0743,
+                    "only foreign functions are allowed to be C-variadic",
                 ));
             }
         } else {
diff --git a/src/test/ui/invalid/invalid-variadic-function.stderr b/src/test/ui/invalid/invalid-variadic-function.stderr
index b2dbf8b9190..fd20bd84edc 100644
--- a/src/test/ui/invalid/invalid-variadic-function.stderr
+++ b/src/test/ui/invalid/invalid-variadic-function.stderr
@@ -1,4 +1,4 @@
-error: only foreign functions are allowed to be C-variadic
+error[E0743]: only foreign functions are allowed to be C-variadic
   --> $DIR/invalid-variadic-function.rs:1:26
    |
 LL | extern "C" fn foo(x: u8, ...);
@@ -12,3 +12,4 @@ LL | extern "C" fn foo(x: u8, ...);
 
 error: aborting due to 2 previous errors
 
+For more information about this error, try `rustc --explain E0743`.
diff --git a/src/test/ui/parser/variadic-ffi-3.stderr b/src/test/ui/parser/variadic-ffi-3.stderr
index 8ea4d194396..aeeebdb9914 100644
--- a/src/test/ui/parser/variadic-ffi-3.stderr
+++ b/src/test/ui/parser/variadic-ffi-3.stderr
@@ -1,4 +1,4 @@
-error: only foreign functions are allowed to be C-variadic
+error[E0743]: only foreign functions are allowed to be C-variadic
   --> $DIR/variadic-ffi-3.rs:1:18
    |
 LL | fn foo(x: isize, ...) {
@@ -6,3 +6,4 @@ LL | fn foo(x: isize, ...) {
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0743`.
diff --git a/src/test/ui/parser/variadic-ffi-4.stderr b/src/test/ui/parser/variadic-ffi-4.stderr
index 69fbf84869c..da83276c72d 100644
--- a/src/test/ui/parser/variadic-ffi-4.stderr
+++ b/src/test/ui/parser/variadic-ffi-4.stderr
@@ -1,4 +1,4 @@
-error: only foreign functions are allowed to be C-variadic
+error[E0743]: only foreign functions are allowed to be C-variadic
   --> $DIR/variadic-ffi-4.rs:1:29
    |
 LL | extern "C" fn foo(x: isize, ...) {
@@ -6,3 +6,4 @@ LL | extern "C" fn foo(x: isize, ...) {
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0743`.