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:
Steve Klabnik 2015-04-24 22:54:25 -04:00
commit 13854722fa
8 changed files with 142 additions and 2 deletions

View File

@ -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",

View 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() {}

View 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() {}

View 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() {}

View 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() {}

View 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() {}

View File

@ -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!'

View 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
}
}