diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-10-29 17:47:11 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-10-30 14:06:22 -0700 |
| commit | 6ef1ab99c13b9ce77f89ec30f1cbbb06bfd6bdf1 (patch) | |
| tree | e1c5a9559c9c5ea1756a86ad7b973698d1cd9da3 | |
| parent | 611c94d984c1c062d6e123d986c0511443900850 (diff) | |
| download | rust-6ef1ab99c13b9ce77f89ec30f1cbbb06bfd6bdf1.tar.gz rust-6ef1ab99c13b9ce77f89ec30f1cbbb06bfd6bdf1.zip | |
syntax: Forbid non-string literals in meta items. #623
| -rw-r--r-- | src/libsyntax/parse/attr.rs | 10 | ||||
| -rw-r--r-- | src/test/compile-fail/non-str-meta.rs | 15 | ||||
| -rw-r--r-- | src/test/run-pass/item-attributes.rs | 6 |
3 files changed, 29 insertions, 2 deletions
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 <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. + +// 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]; |
