Skip to content

Commit

Permalink
Add -Zfuture-incompat-test to assist with testing future-incompat rep…
Browse files Browse the repository at this point in the history
…orts.
  • Loading branch information
ehuss committed Jul 14, 2021
1 parent a08f25a commit 636fcac
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 17 deletions.
1 change: 1 addition & 0 deletions compiler/rustc_interface/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ fn test_debugging_options_tracking_hash() {
untracked!(dump_mir_graphviz, true);
untracked!(emit_future_incompat_report, true);
untracked!(emit_stack_sizes, true);
untracked!(future_incompat_test, true);
untracked!(hir_stats, true);
untracked!(identify_regions, true);
untracked!(incremental_ignore_spans, true);
Expand Down
14 changes: 7 additions & 7 deletions compiler/rustc_middle/src/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use rustc_hir::HirId;
use rustc_index::vec::IndexVec;
use rustc_session::lint::{
builtin::{self, FORBIDDEN_LINT_GROUPS},
FutureIncompatibilityReason, FutureIncompatibleInfo, Level, Lint, LintId,
FutureIncompatibilityReason, Level, Lint, LintId,
};
use rustc_session::{DiagnosticMessageId, Session};
use rustc_span::hygiene::MacroKind;
Expand Down Expand Up @@ -223,12 +223,12 @@ pub fn struct_lint_level<'s, 'd>(
let lint_id = LintId::of(lint);
let future_incompatible = lint.future_incompatible;

let has_future_breakage = matches!(
future_incompatible,
Some(FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
..
})
let has_future_breakage = future_incompatible.map_or(
// Default allow lints trigger too often for testing.
sess.opts.debugging_opts.future_incompat_test && lint.default_level != Level::Allow,
|incompat| {
matches!(incompat.reason, FutureIncompatibilityReason::FutureReleaseErrorReportNow)
},
);

let mut err = match (level, span) {
Expand Down
2 changes: 2 additions & 0 deletions compiler/rustc_session/src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1084,6 +1084,8 @@ options! {
"set the optimization fuel quota for a crate"),
function_sections: Option<bool> = (None, parse_opt_bool, [TRACKED],
"whether each function should go in its own section"),
future_incompat_test: bool = (false, parse_bool, [UNTRACKED],
"forces all lints to be future incompatible, used for internal testing (default: no)"),
gcc_ld: Option<LdImpl> = (None, parse_gcc_ld, [TRACKED], "implementation of ld used by cc"),
graphviz_dark_mode: bool = (false, parse_bool, [UNTRACKED],
"use dark-themed colors in graphviz output (default: no)"),
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/lint/future-incompat-test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// compile-flags: -Zfuture-incompat-test -Zemit-future-incompat-report
// check-pass

// The `-Zfuture-incompat-test flag causes any normal warning to be included
// in the future-incompatible report. The stderr output here should mention
// the future incompatible report (as extracted by compiletest).

fn main() {
let x = 1;
}
9 changes: 9 additions & 0 deletions src/test/ui/lint/future-incompat-test.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Future incompatibility report: Future breakage diagnostic:
warning: unused variable: `x`
--> $DIR/future-incompat-test.rs:9:9
|
LL | let x = 1;
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
= note: `-A unused-variables` implied by `-A unused`

Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ LL | tuple_from_req!(Foo);

warning: 5 warnings emitted

Future incompatibility report: Future breakage date: None, diagnostic:
Future incompatibility report: Future breakage diagnostic:
warning: using an old version of `time-macros-impl`
--> $DIR/time-macros-impl/src/lib.rs:5:32
|
Expand All @@ -99,7 +99,7 @@ LL | impl_macros!(Foo);
= note: the `time-macros-impl` crate will stop compiling in futures version of Rust. Please update to the latest version of the `time` crate to avoid breakage
= note: this warning originates in the macro `impl_macros` (in Nightly builds, run with -Z macro-backtrace for more info)

Future breakage date: None, diagnostic:
Future breakage diagnostic:
warning: using an old version of `time-macros-impl`
--> $DIR/time-macros-impl-0.1.0/src/lib.rs:5:32
|
Expand All @@ -116,7 +116,7 @@ LL | impl_macros!(Foo);
= note: the `time-macros-impl` crate will stop compiling in futures version of Rust. Please update to the latest version of the `time` crate to avoid breakage
= note: this warning originates in the macro `impl_macros` (in Nightly builds, run with -Z macro-backtrace for more info)

Future breakage date: None, diagnostic:
Future breakage diagnostic:
warning: using an old version of `js-sys`
--> $DIR/js-sys-0.3.17/src/lib.rs:5:32
|
Expand All @@ -133,7 +133,7 @@ LL | arrays!(Foo);
= note: older versions of the `js-sys` crate will stop compiling in future versions of Rust; please update to `js-sys` v0.3.40 or above
= note: this warning originates in the macro `arrays` (in Nightly builds, run with -Z macro-backtrace for more info)

Future breakage date: None, diagnostic:
Future breakage diagnostic:
warning: using an old version of `actix-web`
--> $DIR/actix-web/src/extract.rs:5:34
|
Expand All @@ -150,7 +150,7 @@ LL | tuple_from_req!(Foo);
= note: the version of `actix-web` you are using might stop compiling in future versions of Rust; please update to the latest version of the `actix-web` crate to avoid breakage
= note: this warning originates in the macro `tuple_from_req` (in Nightly builds, run with -Z macro-backtrace for more info)

Future breakage date: None, diagnostic:
Future breakage diagnostic:
warning: using an old version of `actix-web`
--> $DIR/actix-web-2.0.0/src/extract.rs:5:34
|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ LL | enum ProceduralMasqueradeDummyType {

warning: 1 warning emitted

Future incompatibility report: Future breakage date: None, diagnostic:
Future incompatibility report: Future breakage diagnostic:
warning: using `procedural-masquerade` crate
--> $DIR/issue-73933-procedural-masquerade.rs:8:6
|
Expand Down
5 changes: 1 addition & 4 deletions src/tools/compiletest/src/json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ struct FutureIncompatReport {

#[derive(Deserialize)]
struct FutureBreakageItem {
future_breakage_date: Option<String>,
diagnostic: Diagnostic,
}

Expand Down Expand Up @@ -104,9 +103,7 @@ pub fn extract_rendered(output: &str) -> String {
.into_iter()
.map(|item| {
format!(
"Future breakage date: {}, diagnostic:\n{}",
item.future_breakage_date
.unwrap_or_else(|| "None".to_string()),
"Future breakage diagnostic:\n{}",
item.diagnostic
.rendered
.unwrap_or_else(|| "Not rendered".to_string())
Expand Down

0 comments on commit 636fcac

Please sign in to comment.