Rollup merge of #24749 - lstat:feature-gate-22820, r=nrc
As part of the audit for #22820 the following feature gate tests have been added: * `negate_unsigned` * `on_unimplemented` * `optin_builtin_traits` * `plugin` * `rustc_attrs` * `rustc_diagnostic_macros` * `slice_patterns` In addition some feature gate error message typos fixed.
This commit is contained in:
commit
13854722fa
@ -394,7 +394,7 @@ fn check_attribute(&self, attr: &ast::Attribute) {
|
|||||||
are reserved for internal compiler diagnostics");
|
are reserved for internal compiler diagnostics");
|
||||||
} else if name.starts_with("derive_") {
|
} else if name.starts_with("derive_") {
|
||||||
self.gate_feature("custom_derive", attr.span,
|
self.gate_feature("custom_derive", attr.span,
|
||||||
"attributes of the form `#[derive_*]` are reserved
|
"attributes of the form `#[derive_*]` are reserved \
|
||||||
for the compiler");
|
for the compiler");
|
||||||
} else {
|
} else {
|
||||||
self.gate_feature("custom_attribute", attr.span,
|
self.gate_feature("custom_attribute", attr.span,
|
||||||
@ -620,7 +620,7 @@ fn visit_pat(&mut self, pattern: &ast::Pat) {
|
|||||||
pattern.span,
|
pattern.span,
|
||||||
"multiple-element slice matches anywhere \
|
"multiple-element slice matches anywhere \
|
||||||
but at the end of a slice (e.g. \
|
but at the end of a slice (e.g. \
|
||||||
`[0, ..xs, 0]` are experimental")
|
`[0, ..xs, 0]`) are experimental")
|
||||||
}
|
}
|
||||||
ast::PatVec(..) => {
|
ast::PatVec(..) => {
|
||||||
self.gate_feature("slice_patterns",
|
self.gate_feature("slice_patterns",
|
||||||
|
17
src/test/compile-fail/feature-gate-negate-unsigned.rs
Normal file
17
src/test/compile-fail/feature-gate-negate-unsigned.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Test that negating unsigned integers is gated by `negate_unsigned` feature
|
||||||
|
// gate
|
||||||
|
|
||||||
|
const MAX: usize = -1;
|
||||||
|
//~^ ERROR unary negation of unsigned integers may be removed in the future
|
||||||
|
|
||||||
|
fn main() {}
|
19
src/test/compile-fail/feature-gate-on-unimplemented.rs
Normal file
19
src/test/compile-fail/feature-gate-on-unimplemented.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Test that `#[rustc_on_unimplemented]` is gated by `on_unimplemented` feature
|
||||||
|
// gate.
|
||||||
|
|
||||||
|
#[rustc_on_unimplemented = "test error `{Self}` with `{Bar}`"]
|
||||||
|
//~^ ERROR the `#[rustc_on_unimplemented]` attribute is an experimental feature
|
||||||
|
trait Foo<Bar>
|
||||||
|
{}
|
||||||
|
|
||||||
|
fn main() {}
|
26
src/test/compile-fail/feature-gate-optin-builtin-traits.rs
Normal file
26
src/test/compile-fail/feature-gate-optin-builtin-traits.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Test that default and negative trait implementations are gated by
|
||||||
|
// `optin_builtin_traits` feature gate
|
||||||
|
|
||||||
|
struct DummyStruct;
|
||||||
|
|
||||||
|
trait DummyTrait {
|
||||||
|
fn dummy(&self) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DummyTrait for .. {}
|
||||||
|
//~^ ERROR default trait implementations are experimental and possibly buggy
|
||||||
|
|
||||||
|
impl !DummyTrait for DummyStruct {}
|
||||||
|
//~^ ERROR negative trait bounds are not yet fully implemented; use marker types for now
|
||||||
|
|
||||||
|
fn main() {}
|
16
src/test/compile-fail/feature-gate-plugin.rs
Normal file
16
src/test/compile-fail/feature-gate-plugin.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Test that `#![plugin(...)]` attribute is gated by `plugin` feature gate
|
||||||
|
|
||||||
|
#![plugin(foo)]
|
||||||
|
//~^ ERROR compiler plugins are experimental and possibly buggy
|
||||||
|
|
||||||
|
fn main() {}
|
21
src/test/compile-fail/feature-gate-rustc-attrs.rs
Normal file
21
src/test/compile-fail/feature-gate-rustc-attrs.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
|
// Test that `#[rustc_*]` attributes are gated by `rustc_attrs` feature gate.
|
||||||
|
|
||||||
|
#[rustc_variance] //~ ERROR the `#[rustc_variance]` attribute is an experimental feature
|
||||||
|
#[rustc_error] //~ ERROR the `#[rustc_error]` attribute is an experimental feature
|
||||||
|
#[rustc_move_fragments] //~ ERROR the `#[rustc_move_fragments]` attribute is an experimental feature
|
||||||
|
#[rustc_foo]
|
||||||
|
//~^ ERROR unless otherwise specified, attributes with the prefix `rustc_` are reserved for internal compiler diagnostics
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Test that diagnostic macros are gated by `rustc_diagnostic_macros` feature
|
||||||
|
// gate
|
||||||
|
|
||||||
|
__register_diagnostic!(E0001);
|
||||||
|
//~^ ERROR macro undefined: '__register_diagnostic!'
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
__diagnostic_used!(E0001);
|
||||||
|
//~^ ERROR macro undefined: '__diagnostic_used!'
|
||||||
|
}
|
||||||
|
|
||||||
|
__build_diagnostic_array!(DIAGNOSTICS);
|
||||||
|
//~^ ERROR macro undefined: '__build_diagnostic_array!'
|
18
src/test/compile-fail/feature-gate-slice-patterns.rs
Normal file
18
src/test/compile-fail/feature-gate-slice-patterns.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Test that slice pattern syntax is gated by `slice_patterns` feature gate
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x = [1, 2, 3, 4, 5];
|
||||||
|
match x {
|
||||||
|
[1, 2, xs..] => {} //~ ERROR slice pattern syntax is experimental
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user