diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs index 5f84f505b5cee..6486014bc97c7 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 0000000000000..d116b7b67ca99 --- /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 or the MIT license +// , 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 61d3ed7fd18e1..69db9fa1b3590 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 0000000000000..71b5f269e34da --- /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 or the MIT license +// , 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() {}