diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2016-05-27 22:05:10 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2016-05-29 21:39:55 +0200 |
| commit | 31b9060ede89c7c11d7d829c3d4b50649bb7f07e (patch) | |
| tree | 25b884e91591f8c93b326e5de724bb8e01049762 | |
| parent | 4fa84830f8a91a2a8db988afec96b416ae2654c0 (diff) | |
| download | rust-31b9060ede89c7c11d7d829c3d4b50649bb7f07e.tar.gz rust-31b9060ede89c7c11d7d829c3d4b50649bb7f07e.zip | |
Improve E0161 error explanation
| -rw-r--r-- | src/librustc/diagnostics.rs | 3 | ||||
| -rw-r--r-- | src/librustc_passes/diagnostics.rs | 27 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index a410a5949bd..d838de4a331 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -438,12 +438,11 @@ This error indicates that the compiler found multiple functions with the `#[start]` attribute. This is an error because there must be a unique entry point into a Rust program. Example: - ``` #![feature(start)] #[start] -fn foo(argc: isize, argv: *const *const u8) -> isize {} // ok! +fn foo(argc: isize, argv: *const *const u8) -> isize { 0 } // ok! ``` "##, diff --git a/src/librustc_passes/diagnostics.rs b/src/librustc_passes/diagnostics.rs index 77f896e011b..cba8bd73c01 100644 --- a/src/librustc_passes/diagnostics.rs +++ b/src/librustc_passes/diagnostics.rs @@ -50,11 +50,36 @@ match 5u32 { "##, E0161: r##" +A value was moved. However, its size was not known at compile time, and only +values of a known size can be moved. + +Erroneous code example: + +```compile_fail +#![feature(box_syntax)] + +fn main() { + let array: &[isize] = &[1, 2, 3]; + let _x: Box<[isize]> = box *array; + // error: cannot move a value of type [isize]: the size of [isize] cannot + // be statically determined +} +``` + In Rust, you can only move a value when its size is known at compile time. To work around this restriction, consider "hiding" the value behind a reference: either `&x` or `&mut x`. Since a reference has a fixed size, this lets you move -it around as usual. +it around as usual. Example: + +``` +#![feature(box_syntax)] + +fn main() { + let array: &[isize] = &[1, 2, 3]; + let _x: Box<&[isize]> = box array; // ok! +} +``` "##, E0265: r##" |
