rust/tests/ui/cfg/cfg_stmt_expr.rs

93 lines
1.7 KiB
Rust
Raw Normal View History

//@ run-pass
#![allow(dead_code)]
#![allow(unused_mut)]
#![allow(unused_variables)]
#![deny(non_snake_case)]
2015-11-24 14:56:20 +01:00
#![feature(stmt_expr_attributes)]
fn main() {
let a = 413;
2025-03-29 17:24:03 +00:00
#[cfg(false)]
let a = ();
assert_eq!(a, 413);
let mut b = 612;
2025-03-29 17:24:03 +00:00
#[cfg(false)]
{
b = 1111;
}
assert_eq!(b, 612);
2025-03-29 17:24:03 +00:00
#[cfg(false)]
undefined_fn();
2025-03-29 17:24:03 +00:00
#[cfg(false)]
undefined_macro!();
2025-03-29 17:24:03 +00:00
#[cfg(false)]
undefined_macro![];
2025-03-29 17:24:03 +00:00
#[cfg(false)]
undefined_macro!{};
// pretty printer bug...
2025-03-29 17:24:03 +00:00
// #[cfg(false)]
// undefined_macro!{}
2025-03-29 17:24:03 +00:00
let () = (#[cfg(false)] 341,); // Should this also work on parens?
let t = (1, #[cfg(false)] 3, 4);
assert_eq!(t, (1, 4));
let f = |_: u32, _: u32| ();
2025-03-29 17:24:03 +00:00
f(2, 1, #[cfg(false)] 6);
2025-03-29 17:24:03 +00:00
let _: u32 = a.clone(#[cfg(false)] undefined);
2025-03-29 17:24:03 +00:00
let _: [(); 0] = [#[cfg(false)] 126];
let t = [#[cfg(false)] 1, 2, 6];
assert_eq!(t, [2, 6]);
{
let r;
2025-03-29 17:24:03 +00:00
#[cfg(false)]
(r = 5);
#[cfg(not(FALSE))]
(r = 10);
assert_eq!(r, 10);
}
// check that macro expanded code works
macro_rules! if_cfg {
($cfg:meta? $ib:block else $eb:block) => {
{
let r;
#[cfg($cfg)]
(r = $ib);
#[cfg(not($cfg))]
(r = $eb);
r
}
}
}
let n = if_cfg!(FALSE? {
413
} else {
612
});
2025-03-29 17:24:03 +00:00
assert_eq!((#[cfg(false)] 1, #[cfg(not(FALSE))] 2), (2,));
assert_eq!(n, 612);
// check that lints work
#[allow(non_snake_case)]
let FOOBAR: () = {
fn SYLADEX() {}
};
#[allow(non_snake_case)]
{
fn CRUXTRUDER() {}
}
}