about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-11-17 16:21:32 -0800
committerbors <bors@rust-lang.org>2013-11-17 16:21:32 -0800
commitb4197aeed670acd855c21c0b66c87eed0919c219 (patch)
treecc331ffc2f3003a7750d1e83528d28f31c3738a8
parent2c9e56f0ed96a7ebc9d6a854f64397f715069feb (diff)
parented34cd1e3cc85252b398f33e6b9a90f9bd462b4d (diff)
downloadrust-b4197aeed670acd855c21c0b66c87eed0919c219.tar.gz
rust-b4197aeed670acd855c21c0b66c87eed0919c219.zip
auto merge of #10511 : cmr/rust/addtests, r=huonw
Commit messages have all
-rw-r--r--src/librustc/middle/check_const.rs10
-rw-r--r--src/test/compile-fail/issue-10487.rs17
-rw-r--r--src/test/compile-fail/static-mut-not-constant.rs2
-rw-r--r--src/test/run-pass/deriving-in-macro.rs24
4 files changed, 50 insertions, 3 deletions
diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs
index 5f84f505b5c..6486014bc97 100644
--- a/src/librustc/middle/check_const.rs
+++ b/src/librustc/middle/check_const.rs
@@ -117,7 +117,7 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
           ExprUnary(_, UnDeref, _) => { }
           ExprUnary(_, UnBox(_), _) | ExprUnary(_, UnUniq, _) => {
             sess.span_err(e.span,
-                          "disallowed operator in constant expression");
+                          "cannot do allocations in constant expressions");
             return;
           }
           ExprLit(@codemap::Spanned {node: lit_str(*), _}) => { }
@@ -191,7 +191,13 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
                     e.span,
                     "borrowed pointers in constants may only refer to \
                      immutable values");
-          }
+          },
+          ExprVstore(_, ExprVstoreUniq) |
+          ExprVstore(_, ExprVstoreBox) |
+          ExprVstore(_, ExprVstoreMutBox) => {
+              sess.span_err(e.span, "cannot allocate vectors in constant expressions")
+          },
+
           _ => {
             sess.span_err(e.span,
                           "constant contains unimplemented expression type");
diff --git a/src/test/compile-fail/issue-10487.rs b/src/test/compile-fail/issue-10487.rs
new file mode 100644
index 00000000000..d116b7b67ca
--- /dev/null
+++ b/src/test/compile-fail/issue-10487.rs
@@ -0,0 +1,17 @@
+// Copyright 2013 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.
+
+#[feature(managed_boxes)];
+
+static x: ~[int] = ~[123, 456]; //~ ERROR: cannot allocate vectors in constant expressions
+static y: @[int] = @[123, 456]; //~ ERROR: cannot allocate vectors in constant expressions
+static z: @mut [int] = @mut [123, 456]; //~ ERROR: cannot allocate vectors in constant expressions
+
+fn main() {}
diff --git a/src/test/compile-fail/static-mut-not-constant.rs b/src/test/compile-fail/static-mut-not-constant.rs
index 61d3ed7fd18..69db9fa1b35 100644
--- a/src/test/compile-fail/static-mut-not-constant.rs
+++ b/src/test/compile-fail/static-mut-not-constant.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-static mut a: ~int = ~3; //~ ERROR: disallowed operator in constant
+static mut a: ~int = ~3; //~ ERROR: cannot do allocations in constant expressions
 
 fn main() {}
diff --git a/src/test/run-pass/deriving-in-macro.rs b/src/test/run-pass/deriving-in-macro.rs
new file mode 100644
index 00000000000..71b5f269e34
--- /dev/null
+++ b/src/test/run-pass/deriving-in-macro.rs
@@ -0,0 +1,24 @@
+// Copyright 2012 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.
+
+#[feature(macro_rules)];
+
+macro_rules! define_vec (
+    () => (
+        mod foo {
+            #[deriving(Eq)]
+            pub struct bar;
+        }
+    )
+)
+
+define_vec!()
+
+pub fn main() {}