rust/tests/ui/feature-gates/stmt_expr_attrs_no_feature.rs
Jubilee Young d89500843c Move 100 entries from tests/ui into subdirs
- Move super-fast-paren-parsing test into ui/parser
- Move stmt_expr_attrs test into ui/feature-gates
- Move macro tests into ui/macros
- Move global_asm tests into ui/asm
- Move env tests into ui/process
- Move xcrate tests into ui/cross-crate
- Move unop tests into ui/unop
- Move backtrace tests into ui/backtrace
- Move check-static tests into ui/statics
- Move expr tests into ui/expr
- Move optimization fuel tests into ui/fuel
- Move ffi attribute tests into ui/ffi-attrs
- Move suggestion tests into ui/suggestions
- Move main tests into ui/fn-main
- Move lint tests into ui/lint
- Move repr tests into ui/repr
- Move intrinsics tests into ui/intrinsics
- Move tool lint tests into ui/tool-attributes
- Move return tests into ui/return
- Move pattern tests into ui/patttern
- Move range tests into ui/range
- Move foreign-fn tests into ui/foreign
- Move orphan-check tests into ui/coherence
- Move inference tests into ui/inference
- Reduce ROOT_ENTRY_LIMIT
2024-05-20 19:55:59 -07:00

142 lines
2.7 KiB
Rust

#![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
_ => (),
}
}