about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCorey Richardson <corey@octayn.net>2013-11-16 01:58:51 -0500
committerCorey Richardson <corey@octayn.net>2013-11-17 18:35:52 -0500
commited34cd1e3cc85252b398f33e6b9a90f9bd462b4d (patch)
tree99545b75b3e18a68de907e733b006c1a88c96f9c
parent5d466ff96ece2e050424a11771ce003488dc2d24 (diff)
downloadrust-ed34cd1e3cc85252b398f33e6b9a90f9bd462b4d.tar.gz
rust-ed34cd1e3cc85252b398f33e6b9a90f9bd462b4d.zip
Better error message when using vectors in statics
Closes #10487
-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
3 files changed, 26 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() {}