Skip to content

Commit

Permalink
Rollup merge of rust-lang#65283 - petrochenkov:softstab2, r=estebank
Browse files Browse the repository at this point in the history
stability: Do not use `buffer_lint` after lowering to HIR

Fixes rust-lang#65253
  • Loading branch information
Centril authored Oct 11, 2019
2 parents 04ba2d1 + ceb4c3f commit f0daac0
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 6 deletions.
14 changes: 11 additions & 3 deletions src/librustc/middle/stability.rs
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,13 @@ pub fn provide(providers: &mut Providers<'_>) {
}

pub fn report_unstable(
sess: &Session, feature: Symbol, reason: Option<Symbol>, issue: u32, is_soft: bool, span: Span
sess: &Session,
feature: Symbol,
reason: Option<Symbol>,
issue: u32,
is_soft: bool,
span: Span,
soft_handler: impl FnOnce(&'static lint::Lint, Span, &str),
) {
let msg = match reason {
Some(r) => format!("use of unstable library feature '{}': {}", feature, r),
Expand All @@ -511,7 +517,7 @@ pub fn report_unstable(
let fresh = sess.one_time_diagnostics.borrow_mut().insert(error_id);
if fresh {
if is_soft {
sess.buffer_lint(lint::builtin::SOFT_UNSTABLE, CRATE_NODE_ID, span, &msg);
soft_handler(lint::builtin::SOFT_UNSTABLE, span, &msg)
} else {
emit_feature_err(
&sess.parse_sess, feature, span, GateIssue::Library(Some(issue)), &msg
Expand Down Expand Up @@ -779,10 +785,12 @@ impl<'tcx> TyCtxt<'tcx> {
/// Additionally, this function will also check if the item is deprecated. If so, and `id` is
/// not `None`, a deprecated lint attached to `id` will be emitted.
pub fn check_stability(self, def_id: DefId, id: Option<HirId>, span: Span) {
let soft_handler =
|lint, span, msg: &_| self.lint_hir(lint, id.unwrap_or(hir::CRATE_HIR_ID), span, msg);
match self.eval_stability(def_id, id, span) {
EvalResult::Allow => {}
EvalResult::Deny { feature, reason, issue, is_soft } =>
report_unstable(self.sess, feature, reason, issue, is_soft, span),
report_unstable(self.sess, feature, reason, issue, is_soft, span, soft_handler),
EvalResult::Unmarked => {
// The API could be uncallable for other reasons, for example when a private module
// was referenced.
Expand Down
7 changes: 6 additions & 1 deletion src/librustc_resolve/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -796,7 +796,12 @@ impl<'a> Resolver<'a> {
if let StabilityLevel::Unstable { reason, issue, is_soft } = stability.level {
let feature = stability.feature;
if !self.active_features.contains(&feature) && !span.allows_unstable(feature) {
stability::report_unstable(self.session, feature, reason, issue, is_soft, span);
let node_id = ast::CRATE_NODE_ID;
let soft_handler =
|lint, span, msg: &_| self.session.buffer_lint(lint, node_id, span, msg);
stability::report_unstable(
self.session, feature, reason, issue, is_soft, span, soft_handler
);
}
}
if let Some(depr) = &stability.rustc_depr {
Expand Down
4 changes: 4 additions & 0 deletions src/test/ui/feature-gates/bench.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
// edition:2018

#[bench] //~ ERROR use of unstable library feature 'test'
//~| WARN this was previously accepted
fn bench() {}

use bench as _; //~ ERROR use of unstable library feature 'test'
//~| WARN this was previously accepted
fn main() {}
13 changes: 11 additions & 2 deletions src/test/ui/feature-gates/bench.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: use of unstable library feature 'test': `bench` is a part of custom test frameworks which are unstable
--> $DIR/bench.rs:1:3
--> $DIR/bench.rs:3:3
|
LL | #[bench]
| ^^^^^
Expand All @@ -8,5 +8,14 @@ LL | #[bench]
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>

error: aborting due to previous error
error: use of unstable library feature 'test': `bench` is a part of custom test frameworks which are unstable
--> $DIR/bench.rs:7:5
|
LL | use bench as _;
| ^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>

error: aborting due to 2 previous errors

0 comments on commit f0daac0

Please sign in to comment.