diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index cad19543608..e87a0474a55 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4548,9 +4548,6 @@ impl Parser { || self.look_ahead(2, |t| *t == token::LPAREN) || self.look_ahead(2, |t| *t == token::LBRACE)) { // MACRO INVOCATION ITEM - if attrs.len() > 0 { - self.fatal("attrs on macros are not yet supported"); - } // item macro. let pth = self.parse_path(NoTypesAllowed).path; diff --git a/src/test/run-pass/macro-with-attrs1.rs b/src/test/run-pass/macro-with-attrs1.rs new file mode 100644 index 00000000000..1e49e4a35cc --- /dev/null +++ b/src/test/run-pass/macro-with-attrs1.rs @@ -0,0 +1,24 @@ +// 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. + +// xfail-fast windows doesn't like compile-flags +// compile-flags: --cfg foo + +#[feature(macro_rules)]; + +#[cfg(foo)] +macro_rules! foo( () => (1) ) + +#[cfg(not(foo))] +macro_rules! foo( () => (2) ) + +fn main() { + assert_eq!(foo!(), 1); +} diff --git a/src/test/compile-fail/ext-after-attrib.rs b/src/test/run-pass/macro-with-attrs2.rs similarity index 58% rename from src/test/compile-fail/ext-after-attrib.rs rename to src/test/run-pass/macro-with-attrs2.rs index eacad50b92f..742769fa376 100644 --- a/src/test/compile-fail/ext-after-attrib.rs +++ b/src/test/run-pass/macro-with-attrs2.rs @@ -1,4 +1,4 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// 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. // @@ -8,10 +8,15 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:attrs on macros are not yet supported +#[feature(macro_rules)]; + +#[cfg(foo)] +macro_rules! foo( () => (1) ) + +#[cfg(not(foo))] +macro_rules! foo( () => (2) ) + +pub fn main() { + assert_eq!(foo!(), 2); +} -// Don't know how to deal with a syntax extension appearing after an -// item attribute. Probably could use a better error message. -#[foo = "bar"] -fmt!("baz") -fn main() { }