Add a distinct error code and description for "main function has wrong type"

This commit is contained in:
Guillaume Gomez 2017-01-04 12:56:33 +01:00
parent 2f0463a4a4
commit e7c3fb90ee
7 changed files with 34 additions and 7 deletions

View File

@ -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`.
"##,
}

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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]
' '
}

View File

@ -14,5 +14,5 @@ struct S {
}
fn main(foo: S) {
//~^ ERROR: main function has wrong type
//~^ ERROR: main function has wrong type [E0579]
}