rollup merge of #24399: brson/stab

This commit is contained in:
Alex Crichton 2015-04-14 10:55:59 -07:00
commit 33733b786f
2 changed files with 57 additions and 29 deletions

View File

@ -57,6 +57,7 @@ fn annotate<F>(&mut self, id: NodeId, use_parent: bool,
attrs: &Vec<Attribute>, item_sp: Span, f: F, required: bool) where
F: FnOnce(&mut Annotator),
{
if self.index.staged_api {
debug!("annotate(id = {:?}, attrs = {:?})", id, attrs);
match attr::find_stability(self.sess.diagnostic(), attrs, item_sp) {
Some(stab) => {
@ -88,6 +89,18 @@ fn annotate<F>(&mut self, id: NodeId, use_parent: bool,
f(self);
}
}
} else {
// Emit warnings for non-staged-api crates. These should be errors.
for attr in attrs {
let tag = attr.name();
if tag == "unstable" || tag == "stable" || tag == "deprecated" {
attr::mark_used(attr);
self.sess.span_warn(attr.span(),
"stability attributes are deprecated and will soon become errors");
}
}
f(self);
}
}
}
@ -157,9 +170,6 @@ fn visit_foreign_item(&mut self, i: &ast::ForeignItem) {
impl Index {
/// Construct the stability index for a crate being compiled.
pub fn build(&mut self, sess: &Session, krate: &Crate, export_map: &PublicItems) {
if !self.staged_api {
return;
}
let mut annotator = Annotator {
sess: sess,
index: self,

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.
// These two generate an error to satisfy the compile-fail test
#![deny(warnings)]
#![feature(blah)] //~ ERROR
#[unstable] //~ WARNING: stability attributes are deprecated
#[stable] //~ WARNING: stability attributes are deprecated
#[deprecated] //~ WARNING: stability attributes are deprecated
fn main() { }