36 lines
879 B
Rust
36 lines
879 B
Rust
// 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() {}
|