about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2014-04-24 11:57:22 +1200
committerNick Cameron <ncameron@mozilla.com>2014-04-24 11:57:22 +1200
commita08198ba6f58e33cd8dda6fec74f3ca2d28bbaf9 (patch)
tree26a471d8130827535fa02affc6cc68dded22078d /src/test
parentd9103301726a4d91c622f8ae3d2d10ad225a0f65 (diff)
downloadrust-a08198ba6f58e33cd8dda6fec74f3ca2d28bbaf9.tar.gz
rust-a08198ba6f58e33cd8dda6fec74f3ca2d28bbaf9.zip
Prevent unsized types being stored in variables
Closes #13376.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/unsized5.rs13
-rw-r--r--src/test/compile-fail/unsized6.rs43
2 files changed, 44 insertions, 12 deletions
diff --git a/src/test/compile-fail/unsized5.rs b/src/test/compile-fail/unsized5.rs
index 9608b7e6b20..614b8e3a5ab 100644
--- a/src/test/compile-fail/unsized5.rs
+++ b/src/test/compile-fail/unsized5.rs
@@ -9,18 +9,7 @@
 // except according to those terms.
 #![feature(struct_variant)]
 
-// Test `type` types not allowed in fields or local variables.
-
-/*trait T for type {}
-
-fn f5<type X>(x: &X) {
-    let _: X; // ERROR local variable with dynamically sized type X
-    let _: (int, (X, int)); // ERROR local variable with dynamically sized type (int,(X,int))
-}
-fn f6<type X: T>(x: &X) {
-    let _: X; // ERROR local variable with dynamically sized type X
-    let _: (int, (X, int)); // ERROR local variable with dynamically sized type (int,(X,int))
-}*/
+// Test `type` types not allowed in fields.
 
 struct S1<type X> {
     f1: X, //~ ERROR type `f1` is dynamically sized. dynamically sized types may only appear as the
diff --git a/src/test/compile-fail/unsized6.rs b/src/test/compile-fail/unsized6.rs
new file mode 100644
index 00000000000..a763373e364
--- /dev/null
+++ b/src/test/compile-fail/unsized6.rs
@@ -0,0 +1,43 @@
+// Copyright 2014 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.
+
+// Test `type` local variables.
+
+trait T for type {}
+
+fn f1<type X>(x: &X) {
+    let _: X; //~ERROR variable `_` has dynamically sized type `X`
+    let _: (int, (X, int)); //~ERROR variable `_` has dynamically sized type `(int,(X,int))`
+    let y: X; //~ERROR variable `y` has dynamically sized type `X`
+    let y: (int, (X, int)); //~ERROR variable `y` has dynamically sized type `(int,(X,int))`
+}
+fn f2<type X: T>(x: &X) {
+    let _: X; //~ERROR variable `_` has dynamically sized type `X`
+    let _: (int, (X, int)); //~ERROR variable `_` has dynamically sized type `(int,(X,int))`
+    let y: X; //~ERROR variable `y` has dynamically sized type `X`
+    let y: (int, (X, int)); //~ERROR variable `y` has dynamically sized type `(int,(X,int))`
+}
+
+fn f3<type X>(x1: ~X, x2: ~X, x3: ~X) {
+    let y: X = *x1; //~ERROR variable `y` has dynamically sized type `X`
+    let y = *x2; //~ERROR variable `y` has dynamically sized type `X`
+    let (y, z) = (*x3, 4); //~ERROR variable `y` has dynamically sized type `X`
+}
+fn f4<type X: T>(x1: ~X, x2: ~X, x3: ~X) {
+    let y: X = *x1;         //~ERROR variable `y` has dynamically sized type `X`
+    let y = *x2;            //~ERROR variable `y` has dynamically sized type `X`
+    let (y, z) = (*x3, 4); //~ERROR variable `y` has dynamically sized type `X`
+}
+
+fn g1<type X>(x: X) {} //~ERROR variable `x` has dynamically sized type `X`
+fn g2<type X: T>(x: X) {} //~ERROR variable `x` has dynamically sized type `X`
+
+pub fn main() {
+}