rollup merge of #20663: brson/feature-staging
This partially implements the feature staging described in the [release channel RFC][rc]. It does not yet fully conform to the RFC as written, but does accomplish its goals sufficiently for the 1.0 alpha release. It has three primary user-visible effects: * On the nightly channel, use of unstable APIs generates a warning. * On the beta channel, use of unstable APIs generates a warning. * On the beta channel, use of feature gates generates a warning. Code that does not trigger these warnings is considered 'stable', modulo pre-1.0 bugs. Disabling the warnings for unstable APIs continues to be done in the existing (i.e. old) style, via `#[allow(...)]`, not that specified in the RFC. I deem this marginally acceptable since any code that must do this is not using the stable dialect of Rust. Use of feature gates is itself gated with the new 'unstable_features' lint, on nightly set to 'allow', and on beta 'warn'. The attribute scheme used here corresponds to an older version of the RFC, with the `#[staged_api]` crate attribute toggling the staging behavior of the stability attributes, but the user impact is only in-tree so I'm not concerned about having to make design changes later (and I may ultimately prefer the scheme here after all, with the `#[staged_api]` crate attribute). Since the Rust codebase itself makes use of unstable features the compiler and build system do a midly elaborate dance to allow it to bootstrap while disobeying these lints (which would otherwise be errors because Rust builds with `-D warnings`). This patch includes one significant hack that causes a regression. Because the `format_args!` macro emits calls to unstable APIs it would trigger the lint. I added a hack to the lint to make it not trigger, but this in turn causes arguments to `println!` not to be checked for feature gates. I don't presently understand macro expansion well enough to fix. This is bug #20661. Closes #16678 [rc]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md Next steps are to disable the existing out-of-tree behavior for stability attributes, and convert the remaining system to be feature-based per the RFC. During the first beta cycle we will set these lints to 'forbid'.
This commit is contained in:
commit
f3b67afcab
43 changed files with 272 additions and 34 deletions
14
src/test/compile-fail/feature-gate-feature-gate.rs
Normal file
14
src/test/compile-fail/feature-gate-feature-gate.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright 2014 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.
|
||||
|
||||
#![forbid(unstable_features)]
|
||||
#![feature(intrinsics)] //~ ERROR unstable feature
|
||||
|
||||
fn main() { }
|
||||
|
|
@ -8,6 +8,14 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// FIXME #20661: format_args! emits calls to the unstable std::fmt::rt
|
||||
// module, so the compiler has some hacks to make that possible
|
||||
// (in span_is_internal). Unnfortunately those hacks defeat this
|
||||
// particular scenario of checking feature gates in arguments to
|
||||
// println!().
|
||||
|
||||
// ignore-test
|
||||
|
||||
// tests that input to a macro is checked for use of gated features. If this
|
||||
// test succeeds due to the acceptance of a feature, pick a new feature to
|
||||
// test. Not ideal, but oh well :(
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
#![no_std]
|
||||
#![feature(globs)]
|
||||
#[macro_use]
|
||||
extern crate "std" as std;
|
||||
#[prelude_import]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue