about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2015-03-16 16:26:28 -0400
committerNiko Matsakis <niko@alum.mit.edu>2015-03-17 08:34:25 -0400
commit277b4f035aa7e42330aabbc243a8fcb5cf4cc8bd (patch)
treeb786a1665596c39a64d27b8b672b911be898bafe /src/test
parent5f5ed62298e5e366b931363b804631305178df5c (diff)
downloadrust-277b4f035aa7e42330aabbc243a8fcb5cf4cc8bd.tar.gz
rust-277b4f035aa7e42330aabbc243a8fcb5cf4cc8bd.zip
Fix soundness hole when unsizing boxes.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/borrowck-consume-unsize-vec.rs22
-rw-r--r--src/test/compile-fail/borrowck-consume-upcast-box.rs24
2 files changed, 46 insertions, 0 deletions
diff --git a/src/test/compile-fail/borrowck-consume-unsize-vec.rs b/src/test/compile-fail/borrowck-consume-unsize-vec.rs
new file mode 100644
index 00000000000..32490e0dc7d
--- /dev/null
+++ b/src/test/compile-fail/borrowck-consume-unsize-vec.rs
@@ -0,0 +1,22 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Check that we report an error if an upcast box is moved twice.
+
+fn consume(_: Box<[i32]>) {
+}
+
+fn foo(b: Box<[i32;5]>) {
+    consume(b);
+    consume(b); //~ ERROR use of moved value
+}
+
+fn main() {
+}
diff --git a/src/test/compile-fail/borrowck-consume-upcast-box.rs b/src/test/compile-fail/borrowck-consume-upcast-box.rs
new file mode 100644
index 00000000000..5bcafa675c7
--- /dev/null
+++ b/src/test/compile-fail/borrowck-consume-upcast-box.rs
@@ -0,0 +1,24 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Check that we report an error if an upcast box is moved twice.
+
+trait Foo { fn dummy(&self); }
+
+fn consume(_: Box<Foo>) {
+}
+
+fn foo(b: Box<Foo+Send>) {
+    consume(b);
+    consume(b); //~ ERROR use of moved value
+}
+
+fn main() {
+}