diff options
| author | dylan_DPC <dylan.dpc@gmail.com> | 2019-01-04 12:37:27 +0530 |
|---|---|---|
| committer | dylan_DPC <dylan.dpc@gmail.com> | 2019-01-08 00:17:03 +0530 |
| commit | 1ef99f1353b5cb2e2a4c4fe316d9869c4834888b (patch) | |
| tree | ab6683e6387f78104c3ebc67e56cf717dd585193 | |
| parent | 21ac19d8fefb023752645fcf2517ce0fad663bf0 (diff) | |
| download | rust-1ef99f1353b5cb2e2a4c4fe316d9869c4834888b.tar.gz rust-1ef99f1353b5cb2e2a4c4fe316d9869c4834888b.zip | |
stabilise cfg_attr
14 files changed, 7 insertions, 94 deletions
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 6365d3e71c6..00000000000 --- 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 9eebbedc0bc..cf5ae4e7630 100644 --- a/src/libsyntax/config.rs +++ b/src/libsyntax/config.rs @@ -94,11 +94,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| { @@ -130,21 +125,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 cca2702f1a7..c900bb916f4 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 ec4ee80b498..283a4b36812 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,7 @@ // compile-pass #![warn(unused_must_use)] -#![feature(cfg_attr_multi)] +#![cfg_attr(stage0, 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 16813a7623c..be762c56048 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-2.rs b/src/test/ui/conditional-compilation/cfg-attr-multi-invalid-2.rs index 39f8fc4b8b9..8a9e99d703c 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-true.rs b/src/test/ui/conditional-compilation/cfg-attr-multi-true.rs index 68307a9c456..d2fd3ec2bec 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,7 @@ // compile-pass #![warn(unused_must_use)] -#![feature(cfg_attr_multi)] +#![cfg_attr(stage0, feature(cfg_attr_multi))] #[cfg_attr(all(), deprecated, must_use)] struct MustUseDeprecated {} diff --git a/src/test/ui/conditional-compilation/cfg-attr-parse.rs b/src/test/ui/conditional-compilation/cfg-attr-parse.rs index eec0e8faca8..5e695375eba 100644 --- a/src/test/ui/conditional-compilation/cfg-attr-parse.rs +++ b/src/test/ui/conditional-compilation/cfg-attr-parse.rs @@ -1,6 +1,6 @@ // Parse `cfg_attr` with varying numbers of attributes and trailing commas -#![feature(cfg_attr_multi)] +#![cfg_attr(stage0, feature(cfg_attr_multi))] // Completely empty `cfg_attr` input #[cfg_attr()] //~ error: expected identifier, found `)` 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 9515380bc28..00000000000 --- 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 088e6df1a1a..00000000000 --- 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 cf02432274b..00000000000 --- 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 a01876114dd..00000000000 --- 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 e4737926e7a..00000000000 --- 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 df740541f55..00000000000 --- 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() {} |
