rust/src/librustc/middle
Brian Anderson c27133e2ce Preliminary 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 to 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
2015-01-07 15:34:56 -08:00
..
cfg rollup merge of #20645: nikomatsakis/rustbook-ice 2015-01-06 15:29:09 -08:00
infer Merge pull request #20674 from jbcrail/fix-misspelled-comments 2015-01-07 15:35:30 +00:00
traits auto merge of #20655 : nikomatsakis/rust/carl-ice, r=aturon 2015-01-07 17:45:11 +00:00
astconv_util.rs Replace full slice notation with index calls 2015-01-07 10:46:33 +13:00
astencode.rs Register new snapshots 2015-01-06 15:24:24 -08:00
check_const.rs fallout 2015-01-07 12:02:52 +13:00
check_loop.rs Replace full slice notation with index calls 2015-01-07 10:46:33 +13:00
check_match.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
check_rvalues.rs core: split into fmt::Show and fmt::String 2015-01-06 14:49:42 -08:00
check_static_recursion.rs Replace full slice notation with index calls 2015-01-07 10:46:33 +13:00
check_static.rs Replace full slice notation with index calls 2015-01-07 10:46:33 +13:00
const_eval.rs rollup merge of #20653: alexcrichton/entry-unstable 2015-01-06 15:29:18 -08:00
dataflow.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
dead.rs Add syntax for negative implementations of traits 2015-01-04 23:16:13 +01:00
def.rs sed -i -s 's/#\[deriving(/#\[derive(/g' **/*.rs 2015-01-03 22:54:18 -05:00
dependency_format.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
effect.rs remove ty_closure 2015-01-05 17:22:15 -05:00
entry.rs
expr_use_visitor.rs rollup merge of #20607: nrc/kinds 2015-01-06 15:34:10 -08:00
fast_reject.rs remove ty_closure 2015-01-05 17:22:15 -05:00
graph.rs More test fixes 2015-01-06 21:26:48 -08:00
intrinsicck.rs Register new snapshots 2015-01-06 15:24:24 -08:00
lang_items.rs Remove old slicing hacks and make new slicing work 2015-01-07 10:49:00 +13:00
liveness.rs rollup merge of #20645: nikomatsakis/rustbook-ice 2015-01-06 15:29:09 -08:00
mem_categorization.rs Test fixes and rebase conflicts 2015-01-06 16:10:37 -08:00
pat_util.rs rustc: middle: move DefMap from resolve to def. 2014-12-20 07:25:37 +02:00
privacy.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
reachable.rs Replace full slice notation with index calls 2015-01-07 10:46:33 +13:00
recursion_limit.rs Add ability to configure recursion limit. 2014-12-08 15:51:38 -05:00
region.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
resolve_lifetime.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
stability.rs Preliminary feature staging 2015-01-07 15:34:56 -08:00
subst.rs rollup merge of #20481: seanmonstar/fmt-show-string 2015-01-06 15:22:24 -08:00
ty_fold.rs Merge pull request #20674 from jbcrail/fix-misspelled-comments 2015-01-07 15:35:30 +00:00
ty_walk.rs core: split into fmt::Show and fmt::String 2015-01-06 14:49:42 -08:00
ty.rs auto merge of #20655 : nikomatsakis/rust/carl-ice, r=aturon 2015-01-07 17:45:11 +00:00
weak_lang_items.rs librustc: Always parse macro!()/macro![] as expressions if not 2014-12-18 12:09:07 -05:00