diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index d0975c76e9351..fa95f667c15af 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -394,7 +394,7 @@ impl<'a> Context<'a> { 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 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> { 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", diff --git a/src/test/compile-fail/feature-gate-negate-unsigned.rs b/src/test/compile-fail/feature-gate-negate-unsigned.rs new file mode 100644 index 0000000000000..7dc654fe1c8d5 --- /dev/null +++ b/src/test/compile-fail/feature-gate-negate-unsigned.rs @@ -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 or the MIT license +// , 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() {} diff --git a/src/test/compile-fail/feature-gate-on-unimplemented.rs b/src/test/compile-fail/feature-gate-on-unimplemented.rs new file mode 100644 index 0000000000000..5d32bba6a766c --- /dev/null +++ b/src/test/compile-fail/feature-gate-on-unimplemented.rs @@ -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 or the MIT license +// , 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 +{} + +fn main() {} diff --git a/src/test/compile-fail/feature-gate-optin-builtin-traits.rs b/src/test/compile-fail/feature-gate-optin-builtin-traits.rs new file mode 100644 index 0000000000000..59d7473a741d6 --- /dev/null +++ b/src/test/compile-fail/feature-gate-optin-builtin-traits.rs @@ -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 or the MIT license +// , 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() {} diff --git a/src/test/compile-fail/feature-gate-plugin.rs b/src/test/compile-fail/feature-gate-plugin.rs new file mode 100644 index 0000000000000..3b5d7626ce309 --- /dev/null +++ b/src/test/compile-fail/feature-gate-plugin.rs @@ -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 or the MIT license +// , 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() {} diff --git a/src/test/compile-fail/feature-gate-rustc-attrs.rs b/src/test/compile-fail/feature-gate-rustc-attrs.rs new file mode 100644 index 0000000000000..dab44b655fce8 --- /dev/null +++ b/src/test/compile-fail/feature-gate-rustc-attrs.rs @@ -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 or the MIT license +// , 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() {} diff --git a/src/test/compile-fail/feature-gate-rustc-diagnostic-macros.rs b/src/test/compile-fail/feature-gate-rustc-diagnostic-macros.rs new file mode 100644 index 0000000000000..8286d833e8d22 --- /dev/null +++ b/src/test/compile-fail/feature-gate-rustc-diagnostic-macros.rs @@ -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 or the MIT license +// , 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!' diff --git a/src/test/compile-fail/feature-gate-slice-patterns.rs b/src/test/compile-fail/feature-gate-slice-patterns.rs new file mode 100644 index 0000000000000..625cb2d351553 --- /dev/null +++ b/src/test/compile-fail/feature-gate-slice-patterns.rs @@ -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 or the MIT license +// , 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 + } +}