Skip to content

Commit 272e60b

Browse files
committed
Move DelayedBug handling into the match.
It results in a tiny bit of duplication (another `self.treat_next_err_as_bug()` condition) but I think it's worth it to get more code into the main `match`.
1 parent ecd3718 commit 272e60b

File tree

1 file changed

+28
-23
lines changed
  • compiler/rustc_errors/src

1 file changed

+28
-23
lines changed

compiler/rustc_errors/src/lib.rs

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,35 +1377,40 @@ impl DiagCtxtInner {
13771377
self.future_breakage_diagnostics.push(diagnostic.clone());
13781378
}
13791379

1380-
// Note that because this comes before the `match` below,
1381-
// `-Zeagerly-emit-delayed-bugs` continues to work even after we've
1382-
// issued an error and stopped recording new delayed bugs.
1383-
if diagnostic.level == DelayedBug && self.flags.eagerly_emit_delayed_bugs {
1384-
diagnostic.level = Error;
1385-
}
1386-
13871380
match diagnostic.level {
1388-
// This must come after the possible promotion of `DelayedBug` to
1389-
// `Error` above.
13901381
Fatal | Error if self.treat_next_err_as_bug() => {
1382+
// `Fatal` and `Error` can be promoted to `Bug`.
13911383
diagnostic.level = Bug;
13921384
}
13931385
DelayedBug => {
1394-
// If we have already emitted at least one error, we don't need
1395-
// to record the delayed bug, because it'll never be used.
1396-
return if let Some(guar) = self.has_errors() {
1397-
Some(guar)
1386+
// Note that because we check these conditions first,
1387+
// `-Zeagerly-emit-delayed-bugs` and `-Ztreat-err-as-bug`
1388+
// continue to work even after we've issued an error and
1389+
// stopped recording new delayed bugs.
1390+
if self.flags.eagerly_emit_delayed_bugs {
1391+
// `DelayedBug` can be promoted to `Error` or `Bug`.
1392+
if self.treat_next_err_as_bug() {
1393+
diagnostic.level = Bug;
1394+
} else {
1395+
diagnostic.level = Error;
1396+
}
13981397
} else {
1399-
let backtrace = std::backtrace::Backtrace::capture();
1400-
// This `unchecked_error_guaranteed` is valid. It is where the
1401-
// `ErrorGuaranteed` for delayed bugs originates. See
1402-
// `DiagCtxtInner::drop`.
1403-
#[allow(deprecated)]
1404-
let guar = ErrorGuaranteed::unchecked_error_guaranteed();
1405-
self.delayed_bugs
1406-
.push((DelayedDiagInner::with_backtrace(diagnostic, backtrace), guar));
1407-
Some(guar)
1408-
};
1398+
// If we have already emitted at least one error, we don't need
1399+
// to record the delayed bug, because it'll never be used.
1400+
return if let Some(guar) = self.has_errors() {
1401+
Some(guar)
1402+
} else {
1403+
let backtrace = std::backtrace::Backtrace::capture();
1404+
// This `unchecked_error_guaranteed` is valid. It is where the
1405+
// `ErrorGuaranteed` for delayed bugs originates. See
1406+
// `DiagCtxtInner::drop`.
1407+
#[allow(deprecated)]
1408+
let guar = ErrorGuaranteed::unchecked_error_guaranteed();
1409+
self.delayed_bugs
1410+
.push((DelayedDiagInner::with_backtrace(diagnostic, backtrace), guar));
1411+
Some(guar)
1412+
};
1413+
}
14091414
}
14101415
Warning if !self.flags.can_emit_warnings => {
14111416
if diagnostic.has_future_breakage() {

0 commit comments

Comments
 (0)