about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2017-01-04 12:56:33 +0100
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2017-01-26 11:12:46 +0100
commite7c3fb90eeda06c6ac2bed523ce8fa358d48505b (patch)
tree54b0a4b7fddf428cc8508057c05249119fe3b85b
parent2f0463a4a4f323c4deffc861349e38c6b5091782 (diff)
downloadrust-e7c3fb90eeda06c6ac2bed523ce8fa358d48505b.tar.gz
rust-e7c3fb90eeda06c6ac2bed523ce8fa358d48505b.zip
Add a distinct error code and description for "main function has wrong type"
-rw-r--r--src/librustc/diagnostics.rs24
-rw-r--r--src/librustc/infer/error_reporting.rs7
-rw-r--r--src/test/compile-fail/E0579.rs (renamed from src/test/compile-fail/E0308-3.rs)2
-rw-r--r--src/test/compile-fail/bad-main.rs2
-rw-r--r--src/test/compile-fail/extern-main-fn.rs2
-rw-r--r--src/test/compile-fail/main-wrong-type-2.rs2
-rw-r--r--src/test/compile-fail/main-wrong-type.rs2
7 files changed, 34 insertions, 7 deletions
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs
index 0d180e6ad76..6d94e1d7259 100644
--- a/src/librustc/diagnostics.rs
+++ b/src/librustc/diagnostics.rs
@@ -1694,6 +1694,30 @@ To understand better how closures work in Rust, read:
 https://doc.rust-lang.org/book/closures.html
 "##,
 
+E0579: r##"
+The `main` function was incorrectly declared.
+
+Erroneous code example:
+
+```compile_fail,E0579
+fn main() -> i32 { // error: main function has wrong type
+    0
+}
+```
+
+The `main` function prototype should never take arguments or return type.
+Example:
+
+```
+fn main() {
+    // your code
+}
+```
+
+If you want to get command-line arguments, use `std::env::args`. To exit with a
+specified exit code, use `std::process::exit`.
+"##,
+
 }
 
 
diff --git a/src/librustc/infer/error_reporting.rs b/src/librustc/infer/error_reporting.rs
index 095d2a78a94..2bed8148b9f 100644
--- a/src/librustc/infer/error_reporting.rs
+++ b/src/librustc/infer/error_reporting.rs
@@ -629,10 +629,13 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
         let mut diag = match trace.cause.code {
             ObligationCauseCode::IfExpressionWithNoElse => {
                 struct_span_err!(self.tcx.sess, span, E0317, "{}", failure_str)
-            },
+            }
+            ObligationCauseCode::MainFunctionType => {
+                struct_span_err!(self.tcx.sess, span, E0579, "{}", failure_str)
+            }
             _ => {
                 struct_span_err!(self.tcx.sess, span, E0308, "{}", failure_str)
-            },
+            }
         };
         self.note_type_err(&mut diag, &trace.cause, None, Some(trace.values), terr);
         diag
diff --git a/src/test/compile-fail/E0308-3.rs b/src/test/compile-fail/E0579.rs
index d7dca056f3f..beb6c792fa1 100644
--- a/src/test/compile-fail/E0308-3.rs
+++ b/src/test/compile-fail/E0579.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main() -> i32 { 0 } //~ ERROR E0308
+fn main() -> i32 { 0 } //~ ERROR E0579
diff --git a/src/test/compile-fail/bad-main.rs b/src/test/compile-fail/bad-main.rs
index 1253f7569e7..6cd033da4bd 100644
--- a/src/test/compile-fail/bad-main.rs
+++ b/src/test/compile-fail/bad-main.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn main(x: isize) { } //~ ERROR: main function has wrong type
+fn main(x: isize) { } //~ ERROR: main function has wrong type [E0579]
diff --git a/src/test/compile-fail/extern-main-fn.rs b/src/test/compile-fail/extern-main-fn.rs
index 11f299acefa..479b3e532c6 100644
--- a/src/test/compile-fail/extern-main-fn.rs
+++ b/src/test/compile-fail/extern-main-fn.rs
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern fn main() {} //~ ERROR: main function has wrong type
+extern fn main() {} //~ ERROR: main function has wrong type [E0579]
diff --git a/src/test/compile-fail/main-wrong-type-2.rs b/src/test/compile-fail/main-wrong-type-2.rs
index 2878cbc7fc1..da1455403c2 100644
--- a/src/test/compile-fail/main-wrong-type-2.rs
+++ b/src/test/compile-fail/main-wrong-type-2.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 fn main() -> char {
-//~^ ERROR: main function has wrong type
+//~^ ERROR: main function has wrong type [E0579]
     ' '
 }
diff --git a/src/test/compile-fail/main-wrong-type.rs b/src/test/compile-fail/main-wrong-type.rs
index 431b855d517..dc517775035 100644
--- a/src/test/compile-fail/main-wrong-type.rs
+++ b/src/test/compile-fail/main-wrong-type.rs
@@ -14,5 +14,5 @@ struct S {
 }
 
 fn main(foo: S) {
-//~^ ERROR: main function has wrong type
+//~^ ERROR: main function has wrong type [E0579]
 }