rust/tests/ui/proc-macro/cfg-eval.rs
2024-02-16 20:02:50 +00:00

38 lines
1.0 KiB
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,);
}