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,);
|
|
}
|