mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// check-pass
 | 
						|
// compile-flags: -Z span-debug
 | 
						|
// aux-build:test-macros.rs
 | 
						|
 | 
						|
#![feature(cfg_eval)]
 | 
						|
#![feature(proc_macro_hygiene)]
 | 
						|
#![feature(stmt_expr_attributes)]
 | 
						|
#![feature(rustc_attrs)]
 | 
						|
#![no_std] // Don't load unnecessary hygiene information from std
 | 
						|
extern crate std;
 | 
						|
 | 
						|
#[macro_use]
 | 
						|
extern crate test_macros;
 | 
						|
 | 
						|
#[cfg_eval]
 | 
						|
#[print_attr]
 | 
						|
struct S1 {
 | 
						|
    #[cfg(FALSE)]
 | 
						|
    field_false: u8,
 | 
						|
    #[cfg(all(/*true*/))]
 | 
						|
    #[cfg_attr(FALSE, unknown_attr)]
 | 
						|
    #[cfg_attr(all(/*true*/), allow())]
 | 
						|
    field_true: u8,
 | 
						|
}
 | 
						|
 | 
						|
#[cfg_eval]
 | 
						|
#[cfg(FALSE)]
 | 
						|
struct S2 {}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    // Subtle - we need a trailing comma after the '1' - otherwise, `#[cfg_eval]` will
 | 
						|
    // turn this into `(#[cfg(all())] 1)`, which is a parenthesized expression, not a tuple
 | 
						|
    // expression. `#[cfg]` is not supported inside parenthesized expressions, so this will
 | 
						|
    // produce an error when attribute collection runs.
 | 
						|
    let _ = #[cfg_eval] #[print_attr] #[cfg_attr(not(FALSE), rustc_dummy)]
 | 
						|
    (#[cfg(FALSE)] 0, #[cfg(all(/*true*/))] 1,);
 | 
						|
}
 |