diff options
| author | Corey Richardson <corey@octayn.net> | 2013-11-16 01:58:51 -0500 |
|---|---|---|
| committer | Corey Richardson <corey@octayn.net> | 2013-11-17 18:35:52 -0500 |
| commit | ed34cd1e3cc85252b398f33e6b9a90f9bd462b4d (patch) | |
| tree | 99545b75b3e18a68de907e733b006c1a88c96f9c | |
| parent | 5d466ff96ece2e050424a11771ce003488dc2d24 (diff) | |
| download | rust-ed34cd1e3cc85252b398f33e6b9a90f9bd462b4d.tar.gz rust-ed34cd1e3cc85252b398f33e6b9a90f9bd462b4d.zip | |
Better error message when using vectors in statics
Closes #10487
| -rw-r--r-- | src/librustc/middle/check_const.rs | 10 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-10487.rs | 17 | ||||
| -rw-r--r-- | src/test/compile-fail/static-mut-not-constant.rs | 2 |
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() {} |
