diff options
| author | Nicholas Nethercote <n.nethercote@gmail.com> | 2023-12-19 17:59:04 +1100 |
|---|---|---|
| committer | Nicholas Nethercote <n.nethercote@gmail.com> | 2023-12-23 13:23:28 +1100 |
| commit | a108a3bd8efba34c86564f2200f62345f4129c0e (patch) | |
| tree | f92d25cbf9f82a3926c6c506ff8ce8501f8f8339 /compiler/rustc_errors/src | |
| parent | 757d6f6ef8567ec846a62f16e3691b7555f2545f (diff) | |
| download | rust-a108a3bd8efba34c86564f2200f62345f4129c0e.tar.gz rust-a108a3bd8efba34c86564f2200f62345f4129c0e.zip | |
Tweak `flush_delayed`.
- Take a `Vec` instead of an iterator, because that's all that is needed. - Do an early return for the "no bugs" case. - Use `enumerate` and an `i == 0` test to identify the first bug. Those changes mean the `no_bug` variable can be removed, which I found hard to read.
Diffstat (limited to 'compiler/rustc_errors/src')
| -rw-r--r-- | compiler/rustc_errors/src/lib.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/compiler/rustc_errors/src/lib.rs b/compiler/rustc_errors/src/lib.rs index c48fe1ca8c2..a4bbd8a587b 100644 --- a/compiler/rustc_errors/src/lib.rs +++ b/compiler/rustc_errors/src/lib.rs @@ -1543,13 +1543,16 @@ impl DiagCtxtInner { fn flush_delayed( &mut self, - bugs: impl IntoIterator<Item = DelayedDiagnostic>, + bugs: Vec<DelayedDiagnostic>, explanation: impl Into<DiagnosticMessage> + Copy, ) { - let mut no_bugs = true; + if bugs.is_empty() { + return; + } + // If backtraces are enabled, also print the query stack let backtrace = std::env::var_os("RUST_BACKTRACE").map_or(true, |x| &x != "0"); - for bug in bugs { + for (i, bug) in bugs.into_iter().enumerate() { if let Some(file) = self.ice_file.as_ref() && let Ok(mut out) = std::fs::File::options().create(true).append(true).open(file) { @@ -1564,16 +1567,16 @@ impl DiagCtxtInner { &bug.note ); } - let mut bug = - if backtrace || self.ice_file.is_none() { bug.decorate() } else { bug.inner }; - if no_bugs { + if i == 0 { // Put the overall explanation before the `DelayedBug`s, to // frame them better (e.g. separate warnings from them). self.emit_diagnostic(Diagnostic::new(Bug, explanation)); - no_bugs = false; } + let mut bug = + if backtrace || self.ice_file.is_none() { bug.decorate() } else { bug.inner }; + // "Undelay" the `DelayedBug`s (into plain `Bug`s). if bug.level != Level::DelayedBug { // NOTE(eddyb) not panicking here because we're already producing @@ -1589,9 +1592,7 @@ impl DiagCtxtInner { } // Panic with `DelayedBugPanic` to avoid "unexpected panic" messages. - if !no_bugs { - panic::panic_any(DelayedBugPanic); - } + panic::panic_any(DelayedBugPanic); } fn bump_lint_err_count(&mut self) { |
