| #![feature(rustc_attrs)] |
| |
| macro_rules! stmt_mac { |
| () => { |
| fn b() {} |
| } |
| } |
| |
| fn main() { |
| #[rustc_dummy] |
| fn a() {} |
| |
| // Bug: built-in attrs like `rustc_dummy` are not gated on blocks, but other attrs are. |
| #[rustfmt::skip] //~ ERROR attributes on expressions are experimental |
| { |
| |
| } |
| |
| #[rustc_dummy] |
| 5; |
| |
| #[rustc_dummy] |
| stmt_mac!(); |
| } |
| |
| // Check that cfg works right |
| |
| #[cfg(FALSE)] |
| fn c() { |
| #[rustc_dummy] |
| 5; |
| } |
| |
| #[cfg(not(FALSE))] |
| fn j() { |
| #[rustc_dummy] |
| 5; |
| } |
| |
| #[cfg_attr(not(FALSE), cfg(FALSE))] |
| fn d() { |
| #[rustc_dummy] |
| 8; |
| } |
| |
| #[cfg_attr(not(FALSE), cfg(not(FALSE)))] |
| fn i() { |
| #[rustc_dummy] |
| 8; |
| } |
| |
| // check that macro expansion and cfg works right |
| |
| macro_rules! item_mac { |
| ($e:ident) => { |
| fn $e() { |
| #[rustc_dummy] |
| 42; |
| |
| #[cfg(FALSE)] |
| fn f() { |
| #[rustc_dummy] |
| 5; |
| } |
| |
| #[cfg(not(FALSE))] |
| fn k() { |
| #[rustc_dummy] |
| 5; |
| } |
| |
| #[cfg_attr(not(FALSE), cfg(FALSE))] |
| fn g() { |
| #[rustc_dummy] |
| 8; |
| } |
| |
| #[cfg_attr(not(FALSE), cfg(not(FALSE)))] |
| fn h() { |
| #[rustc_dummy] |
| 8; |
| } |
| |
| } |
| } |
| } |
| |
| item_mac!(e); |
| |
| // check that the gate visitor works right: |
| |
| extern "C" { |
| #[cfg(FALSE)] |
| fn x(a: [u8; #[rustc_dummy] 5]); |
| fn y(a: [u8; #[rustc_dummy] 5]); //~ ERROR attributes on expressions are experimental |
| } |
| |
| struct Foo; |
| impl Foo { |
| #[cfg(FALSE)] |
| const X: u8 = #[rustc_dummy] 5; |
| const Y: u8 = #[rustc_dummy] 5; //~ ERROR attributes on expressions are experimental |
| } |
| |
| trait Bar { |
| #[cfg(FALSE)] |
| const X: [u8; #[rustc_dummy] 5]; |
| const Y: [u8; #[rustc_dummy] 5]; //~ ERROR attributes on expressions are experimental |
| } |
| |
| struct Joyce { |
| #[cfg(FALSE)] |
| field: [u8; #[rustc_dummy] 5], |
| field2: [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental |
| } |
| |
| struct Walky( |
| #[cfg(FALSE)] [u8; #[rustc_dummy] 5], |
| [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental |
| ); |
| |
| enum Mike { |
| Happy( |
| #[cfg(FALSE)] [u8; #[rustc_dummy] 5], |
| [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental |
| ), |
| Angry { |
| #[cfg(FALSE)] |
| field: [u8; #[rustc_dummy] 5], |
| field2: [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental |
| } |
| } |
| |
| fn pat() { |
| match 5 { |
| #[cfg(FALSE)] |
| 5 => #[rustc_dummy] (), |
| 6 => #[rustc_dummy] (), //~ ERROR attributes on expressions are experimental |
| _ => (), |
| } |
| } |