// Make sure that marks from declarative macros are applied to tokens in nonterminal. //@ check-pass //@ compile-flags: -Z span-debug -Z macro-backtrace -Z unpretty=expanded,hygiene //@ compile-flags: -Z trim-diagnostic-paths=no // ignore-tidy-linelength //@ normalize-stdout-test "\d+#" -> "0#" //@ normalize-stdout-test "expn\d{3,}" -> "expnNNN" //@ normalize-stdout-test "extern crate compiler_builtins /\* \d+ \*/" -> "extern crate compiler_builtins /* NNN */" //@ aux-build:test-macros.rs #![feature(decl_macro)] #![no_std] // Don't load unnecessary hygiene information from std extern crate std; #[macro_use] extern crate test_macros; macro_rules! outer { ($item:item) => { macro inner() { print_bang! { $item } } inner!(); }; } struct S; outer! { struct S; // OK, not a duplicate definition of `S` } fn main() {}