rust/tests/ui/proc-macro/cfg-eval.rs
2023-01-11 09:32:08 +00:00

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