From c454c1d4ac9ad19a03b892a6173419e8b95849d1 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Mon, 4 Jul 2016 03:10:04 +0000 Subject: [PATCH 1/2] Strip unconfigured items from `MultiModifier`-expanded AST --- src/libsyntax/ext/expand.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index c670283e559d9..877293bac54f7 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -769,7 +769,11 @@ fn expand_annotatable(mut item: Annotatable, fld: &mut MacroExpander) -> SmallVe }; fld.cx.bt_pop(); - modified.into_iter().flat_map(|it| expand_annotatable(it, fld)).collect() + let configured = modified.into_iter().flat_map(|it| { + it.fold_with(&mut fld.strip_unconfigured()) + }).collect::>(); + + configured.into_iter().flat_map(|it| expand_annotatable(it, fld)).collect() } } } From bf4911b9560a20d1861627a2db3de33843f964b1 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Tue, 5 Jul 2016 00:22:13 +0000 Subject: [PATCH 2/2] Add regression test --- src/test/run-pass-fulldeps/auxiliary/macro_crate_test.rs | 1 + src/test/run-pass-fulldeps/macro-crate.rs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/test/run-pass-fulldeps/auxiliary/macro_crate_test.rs b/src/test/run-pass-fulldeps/auxiliary/macro_crate_test.rs index 11d81eda55625..3f50811f826e0 100644 --- a/src/test/run-pass-fulldeps/auxiliary/macro_crate_test.rs +++ b/src/test/run-pass-fulldeps/auxiliary/macro_crate_test.rs @@ -72,6 +72,7 @@ fn expand_into_foo_multi(cx: &mut ExtCtxt, ..(*quote_item!(cx, enum Foo2 { Bar2, Baz2 }).unwrap()).clone() })), Annotatable::Item(quote_item!(cx, enum Foo3 { Bar }).unwrap()), + Annotatable::Item(quote_item!(cx, #[cfg(any())] fn foo2() {}).unwrap()), ], Annotatable::ImplItem(it) => vec![ quote_item!(cx, impl X { fn foo(&self) -> i32 { 42 } }).unwrap().and_then(|i| { diff --git a/src/test/run-pass-fulldeps/macro-crate.rs b/src/test/run-pass-fulldeps/macro-crate.rs index d17adff007c63..fe2317aabea68 100644 --- a/src/test/run-pass-fulldeps/macro-crate.rs +++ b/src/test/run-pass-fulldeps/macro-crate.rs @@ -21,6 +21,9 @@ extern crate macro_crate_test; #[derive(PartialEq, Clone, Debug)] fn foo() -> AnotherFakeTypeThatHadBetterGoAway {} +// Check that the `#[into_multi_foo]`-generated `foo2` is configured away +fn foo2() {} + trait Qux { #[into_multi_foo] fn bar();