diff --git a/src/doc/unstable-book/src/language-features/cfg-attr-multi.md b/src/doc/unstable-book/src/language-features/cfg-attr-multi.md deleted file mode 100644 index 6365d3e71c616..0000000000000 --- a/src/doc/unstable-book/src/language-features/cfg-attr-multi.md +++ /dev/null @@ -1,20 +0,0 @@ -# `cfg_attr_multi` - -The tracking issue for this feature is: [#54881] -The RFC for this feature is: [#2539] - -[#54881]: https://github.com/rust-lang/rust/issues/54881 -[#2539]: https://github.com/rust-lang/rfcs/pull/2539 - ------------------------- - -This feature flag lets you put multiple attributes into a `cfg_attr` attribute. - -Example: - -```rust,ignore -#[cfg_attr(all(), must_use, optimize)] -``` - -Because `cfg_attr` resolves before procedural macros, this does not affect -macro resolution at all. \ No newline at end of file diff --git a/src/libsyntax/config.rs b/src/libsyntax/config.rs index 9eebbedc0bc8c..a987f534a2725 100644 --- a/src/libsyntax/config.rs +++ b/src/libsyntax/config.rs @@ -5,7 +5,6 @@ use feature_gate::{ Features, get_features, GateIssue, - emit_feature_err, }; use {fold, attr}; use ast; @@ -94,13 +93,6 @@ impl<'a> StripUnconfigured<'a> { return vec![attr]; } - let gate_cfg_attr_multi = if let Some(ref features) = self.features { - !features.cfg_attr_multi - } else { - false - }; - let cfg_attr_span = attr.span; - let (cfg_predicate, expanded_attrs) = match attr.parse(self.sess, |parser| { parser.expect(&token::OpenDelim(token::Paren))?; @@ -130,21 +122,8 @@ impl<'a> StripUnconfigured<'a> { // Check feature gate and lint on zero attributes in source. Even if the feature is gated, // we still compute as if it wasn't, since the emitted error will stop compilation further // along the compilation. - match (expanded_attrs.len(), gate_cfg_attr_multi) { - (0, false) => { - // FIXME: Emit unused attribute lint here. - }, - (1, _) => {}, - (_, true) => { - emit_feature_err( - self.sess, - "cfg_attr_multi", - cfg_attr_span, - GateIssue::Language, - "cfg_attr with zero or more than one attributes is experimental", - ); - }, - (_, false) => {} + if expanded_attrs.len() == 0 { + // FIXME: Emit unused attribute lint here. } if attr::cfg_matches(&cfg_predicate, self.sess, self.features) { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index cca2702f1a784..cddec3eb23a5a 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -465,9 +465,6 @@ declare_features! ( // Allows `impl Trait` in bindings (`let`, `const`, `static`). (active, impl_trait_in_bindings, "1.30.0", Some(34511), None), - // `#[cfg_attr(predicate, multiple, attributes, here)]` - (active, cfg_attr_multi, "1.31.0", Some(54881), None), - // Allows `const _: TYPE = VALUE`. (active, underscore_const_names, "1.31.0", Some(54912), None), @@ -689,6 +686,8 @@ declare_features! ( (accepted, repr_packed, "1.33.0", Some(33158), None), // Allows calling `const unsafe fn` inside `unsafe` blocks in `const fn` functions. (accepted, min_const_unsafe_fn, "1.33.0", Some(55607), None), + // `#[cfg_attr(predicate, multiple, attributes, here)]` + (accepted, cfg_attr_multi, "1.33.0", Some(54881), None), ); // If you change this, please modify `src/doc/unstable-book` as well. You must diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-false.rs b/src/test/ui/conditional-compilation/cfg-attr-multi-false.rs index ec4ee80b498a5..f1ab2f0f9461f 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-false.rs +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-false.rs @@ -4,7 +4,6 @@ // compile-pass #![warn(unused_must_use)] -#![feature(cfg_attr_multi)] #[cfg_attr(any(), deprecated, must_use)] struct Struct {} diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.rs b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.rs index 16813a7623c77..be762c56048d4 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.rs +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.rs @@ -1,6 +1,5 @@ // compile-flags: --cfg broken -#![feature(cfg_attr_multi)] #![crate_type = "lib"] #![cfg_attr(broken, no_core, no_std)] //~ ERROR no_core is experimental diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.stderr b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.stderr index f63e4f93dfcbd..8cdf4ec31e7fc 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.stderr +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-1.stderr @@ -1,5 +1,5 @@ error[E0658]: no_core is experimental (see issue #29639) - --> $DIR/cfg-attr-multi-invalid-1.rs:5:21 + --> $DIR/cfg-attr-multi-invalid-1.rs:4:21 | LL | #![cfg_attr(broken, no_core, no_std)] //~ ERROR no_core is experimental | ^^^^^^^ diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.rs b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.rs index 39f8fc4b8b9f1..8a9e99d703c70 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.rs +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.rs @@ -1,6 +1,5 @@ // compile-flags: --cfg broken -#![feature(cfg_attr_multi)] #![crate_type = "lib"] #![cfg_attr(broken, no_std, no_core)] //~ ERROR no_core is experimental diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.stderr b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.stderr index 590720002237e..b3a3b0c0f97bd 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.stderr +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.stderr @@ -1,5 +1,5 @@ error[E0658]: no_core is experimental (see issue #29639) - --> $DIR/cfg-attr-multi-invalid-2.rs:5:29 + --> $DIR/cfg-attr-multi-invalid-2.rs:4:29 | LL | #![cfg_attr(broken, no_std, no_core)] //~ ERROR no_core is experimental | ^^^^^^^ diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-true.rs b/src/test/ui/conditional-compilation/cfg-attr-multi-true.rs index 68307a9c456b7..86524e8bd28ff 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-true.rs +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-true.rs @@ -5,7 +5,6 @@ // compile-pass #![warn(unused_must_use)] -#![feature(cfg_attr_multi)] #[cfg_attr(all(), deprecated, must_use)] struct MustUseDeprecated {} diff --git a/src/test/ui/conditional-compilation/cfg-attr-multi-true.stderr b/src/test/ui/conditional-compilation/cfg-attr-multi-true.stderr index 8b62587c6f893..3d14c19739798 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-multi-true.stderr +++ b/src/test/ui/conditional-compilation/cfg-attr-multi-true.stderr @@ -1,5 +1,5 @@ warning: use of deprecated item 'MustUseDeprecated' - --> $DIR/cfg-attr-multi-true.rs:13:6 + --> $DIR/cfg-attr-multi-true.rs:12:6 | LL | impl MustUseDeprecated { //~ warning: use of deprecated item | ^^^^^^^^^^^^^^^^^ @@ -7,25 +7,25 @@ LL | impl MustUseDeprecated { //~ warning: use of deprecated item = note: #[warn(deprecated)] on by default warning: use of deprecated item 'MustUseDeprecated' - --> $DIR/cfg-attr-multi-true.rs:20:5 + --> $DIR/cfg-attr-multi-true.rs:19:5 | LL | MustUseDeprecated::new(); //~ warning: use of deprecated item | ^^^^^^^^^^^^^^^^^^^^^^ warning: use of deprecated item 'MustUseDeprecated' - --> $DIR/cfg-attr-multi-true.rs:14:17 + --> $DIR/cfg-attr-multi-true.rs:13:17 | LL | fn new() -> MustUseDeprecated { //~ warning: use of deprecated item | ^^^^^^^^^^^^^^^^^ warning: use of deprecated item 'MustUseDeprecated' - --> $DIR/cfg-attr-multi-true.rs:15:9 + --> $DIR/cfg-attr-multi-true.rs:14:9 | LL | MustUseDeprecated {} //~ warning: use of deprecated item | ^^^^^^^^^^^^^^^^^ warning: unused `MustUseDeprecated` that must be used - --> $DIR/cfg-attr-multi-true.rs:20:5 + --> $DIR/cfg-attr-multi-true.rs:19:5 | LL | MustUseDeprecated::new(); //~ warning: use of deprecated item | ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/conditional-compilation/cfg-attr-parse.rs b/src/test/ui/conditional-compilation/cfg-attr-parse.rs index eec0e8faca877..93aef72220cc4 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-parse.rs +++ b/src/test/ui/conditional-compilation/cfg-attr-parse.rs @@ -1,7 +1,5 @@ // Parse `cfg_attr` with varying numbers of attributes and trailing commas -#![feature(cfg_attr_multi)] - // Completely empty `cfg_attr` input #[cfg_attr()] //~ error: expected identifier, found `)` struct NoConfigurationPredicate; diff --git a/src/test/ui/conditional-compilation/cfg-attr-parse.stderr b/src/test/ui/conditional-compilation/cfg-attr-parse.stderr index 553406b6dd83d..36c7c817cb33d 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-parse.stderr +++ b/src/test/ui/conditional-compilation/cfg-attr-parse.stderr @@ -1,29 +1,29 @@ error: expected identifier, found `)` - --> $DIR/cfg-attr-parse.rs:6:12 + --> $DIR/cfg-attr-parse.rs:4:12 | LL | #[cfg_attr()] //~ error: expected identifier, found `)` | ^ expected identifier error: expected `,`, found `)` - --> $DIR/cfg-attr-parse.rs:10:17 + --> $DIR/cfg-attr-parse.rs:8:17 | LL | #[cfg_attr(all())] //~ error: expected `,`, found `)` | ^ expected `,` error: expected identifier, found `,` - --> $DIR/cfg-attr-parse.rs:18:18 + --> $DIR/cfg-attr-parse.rs:16:18 | LL | #[cfg_attr(all(),,)] //~ ERROR expected identifier | ^ expected identifier error: expected identifier, found `,` - --> $DIR/cfg-attr-parse.rs:30:28 + --> $DIR/cfg-attr-parse.rs:28:28 | LL | #[cfg_attr(all(), must_use,,)] //~ ERROR expected identifier | ^ expected identifier error: expected identifier, found `,` - --> $DIR/cfg-attr-parse.rs:42:40 + --> $DIR/cfg-attr-parse.rs:40:40 | LL | #[cfg_attr(all(), must_use, deprecated,,)] //~ ERROR expected identifier | ^ expected identifier diff --git a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-1.rs b/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-1.rs deleted file mode 100644 index 9515380bc2856..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-1.rs +++ /dev/null @@ -1,5 +0,0 @@ -// gate-test-cfg_attr_multi - -#![cfg_attr(all(), warn(nonstandard_style), allow(unused_attributes))] -//~^ ERROR cfg_attr with zero or more than one attributes is experimental -fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-1.stderr b/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-1.stderr deleted file mode 100644 index 088e6df1a1ac1..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-1.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0658]: cfg_attr with zero or more than one attributes is experimental (see issue #54881) - --> $DIR/feature-gate-cfg-attr-multi-1.rs:3:1 - | -LL | #![cfg_attr(all(), warn(nonstandard_style), allow(unused_attributes))] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(cfg_attr_multi)] to the crate attributes to enable - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-2.rs b/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-2.rs deleted file mode 100644 index cf02432274b1e..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-2.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![cfg_attr(all(),)] -//~^ ERROR cfg_attr with zero or more than one attributes is experimental -fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-2.stderr b/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-2.stderr deleted file mode 100644 index a01876114dde8..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-2.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0658]: cfg_attr with zero or more than one attributes is experimental (see issue #54881) - --> $DIR/feature-gate-cfg-attr-multi-2.rs:1:1 - | -LL | #![cfg_attr(all(),)] - | ^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(cfg_attr_multi)] to the crate attributes to enable - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-bootstrap-1.rs b/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-bootstrap-1.rs deleted file mode 100644 index e4737926e7a22..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-bootstrap-1.rs +++ /dev/null @@ -1,7 +0,0 @@ -// Test that settingt the featute gate while using its functionality doesn't error. - -// compile-pass - -#![cfg_attr(all(), feature(cfg_attr_multi), crate_type="bin")] - -fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-bootstrap-2.rs b/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-bootstrap-2.rs deleted file mode 100644 index df740541f5543..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-attr-multi-bootstrap-2.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Test that settingt the featute gate while using its functionality doesn't error. -// Specifically, if there's a cfg-attr *before* the feature gate. - -// compile-pass - -#![cfg_attr(all(),)] -#![cfg_attr(all(), feature(cfg_attr_multi), crate_type="bin")] - -fn main() {}