diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index a8132860b9b..9030b4394e4 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -161,6 +161,16 @@ impl parser_attr for Parser { token::EQ => { self.bump(); let lit = self.parse_lit(); + // FIXME #623 Non-string meta items are not serialized correctly; + // just forbid them for now + match lit.node { + ast::lit_str(*) => (), + _ => { + self.span_err( + lit.span, + "non-string literals are not allowed in meta-items"); + } + } let hi = self.span.hi; @spanned(lo, hi, ast::MetaNameValue(name, lit)) } diff --git a/src/test/compile-fail/non-str-meta.rs b/src/test/compile-fail/non-str-meta.rs new file mode 100644 index 00000000000..752f72f0b08 --- /dev/null +++ b/src/test/compile-fail/non-str-meta.rs @@ -0,0 +1,15 @@ +// 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. + +// Issue #623 - non-string meta items are not serialized correctly; +// for now just forbid them + +#[foo = 1] //~ ERROR: non-string literals are not allowed in meta-items +fn main() { } diff --git a/src/test/run-pass/item-attributes.rs b/src/test/run-pass/item-attributes.rs index 22f0f1f199f..310dbea50d1 100644 --- a/src/test/run-pass/item-attributes.rs +++ b/src/test/run-pass/item-attributes.rs @@ -174,7 +174,9 @@ mod test_foreign_items { } } -mod test_literals { + +// FIXME #623 - these aren't supported yet +/*mod test_literals { #[str = "s"]; #[char = 'c']; #[int = 100]; @@ -185,7 +187,7 @@ mod test_literals { #[nil = ()]; #[bool = true]; mod m {} -} +}*/ fn test_fn_inner() { #[inner_fn_attr];