about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-10-29 17:47:11 -0700
committerBrian Anderson <banderson@mozilla.com>2013-10-30 14:06:22 -0700
commit6ef1ab99c13b9ce77f89ec30f1cbbb06bfd6bdf1 (patch)
treee1c5a9559c9c5ea1756a86ad7b973698d1cd9da3
parent611c94d984c1c062d6e123d986c0511443900850 (diff)
downloadrust-6ef1ab99c13b9ce77f89ec30f1cbbb06bfd6bdf1.tar.gz
rust-6ef1ab99c13b9ce77f89ec30f1cbbb06bfd6bdf1.zip
syntax: Forbid non-string literals in meta items. #623
-rw-r--r--src/libsyntax/parse/attr.rs10
-rw-r--r--src/test/compile-fail/non-str-meta.rs15
-rw-r--r--src/test/run-pass/item-attributes.rs6
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];