Skip to content

Commit

Permalink
Auto merge of #44627 - zackmdavis:the_capgate_perogative, r=nrc
Browse files Browse the repository at this point in the history
`--cap-lints allow` switches off `can_emit_warnings`

This boolean field on the error `Handler` is toggled to silence
warnings when `-A warnings` is passed. (This is actually a separate
mechanism from the global lint level—whether there's some redundancy
to be factored away here is an important question, but not one we
concern ourselves with in this commit.)  But the same rationale
applies for `--cap-lints allow`. In particular, this makes the "soft"
feature-gate warning introduced in 8492ad2 (which is not a lint, but
just calls `struct_span_warn`) not pollute the builds of dependent
crates.

Thanks to @kennytm for pointing out the potential of
`can_emit_warnings` for this purpose.

Resolves #44213.
  • Loading branch information
bors committed Sep 21, 2017
2 parents e2504cf + d02ceac commit 35edf7d
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/librustc/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -660,12 +660,16 @@ pub fn build_session_with_codemap(sopts: config::Options,
// FIXME: This is not general enough to make the warning lint completely override
// normal diagnostic warnings, since the warning lint can also be denied and changed
// later via the source code.
let can_print_warnings = sopts.lint_opts
let warnings_allow = sopts.lint_opts
.iter()
.filter(|&&(ref key, _)| *key == "warnings")
.map(|&(_, ref level)| *level != lint::Allow)
.map(|&(_, ref level)| *level == lint::Allow)
.last()
.unwrap_or(true);
.unwrap_or(false);
let cap_lints_allow = sopts.lint_cap.map_or(false, |cap| cap == lint::Allow);

let can_print_warnings = !(warnings_allow || cap_lints_allow);

let treat_err_as_bug = sopts.debugging_opts.treat_err_as_bug;

let emitter: Box<Emitter> = match (sopts.error_format, emitter_dest) {
Expand Down
22 changes: 22 additions & 0 deletions src/test/compile-fail/feature-gate-fn_must_use-cap-lints-allow.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2017 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.

// compile-flags: --cap-lints allow

// This tests that the fn_must_use feature-gate warning respects the lint
// cap. (See discussion in Issue #44213.)

#![feature(rustc_attrs)]

#[must_use] // (no feature-gate warning because of the lint cap!)
fn need_to_use_it() -> bool { true }

#[rustc_error]
fn main() {} //~ ERROR compilation successful

0 comments on commit 35edf7d

Please sign in to comment.