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");
|
||||
} else if name.starts_with("derive_") {
|
||||
self.gate_feature("custom_derive", attr.span,
|
||||
"attributes of the form `#[derive_*]` are reserved
|
||||
"attributes of the form `#[derive_*]` are reserved \
|
||||
for the compiler");
|
||||
} else {
|
||||
self.gate_feature("custom_attribute", attr.span,
|
||||
@ -620,7 +620,7 @@ fn visit_pat(&mut self, pattern: &ast::Pat) {
|
||||
pattern.span,
|
||||
"multiple-element slice matches anywhere \
|
||||
but at the end of a slice (e.g. \
|
||||
`[0, ..xs, 0]` are experimental")
|
||||
`[0, ..xs, 0]`) are experimental")
|
||||
}
|
||||
ast::PatVec(..) => {
|
||||
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