about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2016-05-27 22:05:10 +0200
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2016-05-29 21:39:55 +0200
commit31b9060ede89c7c11d7d829c3d4b50649bb7f07e (patch)
tree25b884e91591f8c93b326e5de724bb8e01049762
parent4fa84830f8a91a2a8db988afec96b416ae2654c0 (diff)
downloadrust-31b9060ede89c7c11d7d829c3d4b50649bb7f07e.tar.gz
rust-31b9060ede89c7c11d7d829c3d4b50649bb7f07e.zip
Improve E0161 error explanation
-rw-r--r--src/librustc/diagnostics.rs3
-rw-r--r--src/librustc_passes/diagnostics.rs27
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##"