mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			876 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			876 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() {}
 |