Only bump error count when we are sure that the diagnostic is not a repetition.
This ensures that if we emit the same diagnostic twice, the error count will match the real number of errors shown to the user. Fixes #42106
This commit is contained in:
parent
687d3d15ba
commit
063607eecb
8 changed files with 14 additions and 20 deletions
|
@ -100,9 +100,6 @@ impl Diagnostic {
|
|||
|
||||
/// Cancel the diagnostic (a structured diagnostic must either be emitted or
|
||||
/// canceled or it will panic when dropped).
|
||||
/// BEWARE: if this DiagnosticBuilder is an error, then creating it will
|
||||
/// bump the error count on the Handler and canceling it won't undo that.
|
||||
/// If you want to decrement the error count you should use `Handler::cancel`.
|
||||
pub fn cancel(&mut self) {
|
||||
self.level = Level::Cancelled;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,12 @@ impl<'a> DiagnosticBuilder<'a> {
|
|||
return;
|
||||
}
|
||||
|
||||
let is_error = match self.level {
|
||||
self.handler.emit_db(&self);
|
||||
self.cancel();
|
||||
}
|
||||
|
||||
pub fn is_error(&self) -> bool {
|
||||
match self.level {
|
||||
Level::Bug |
|
||||
Level::Fatal |
|
||||
Level::PhaseFatal |
|
||||
|
@ -97,18 +102,7 @@ impl<'a> DiagnosticBuilder<'a> {
|
|||
Level::Cancelled => {
|
||||
false
|
||||
}
|
||||
};
|
||||
|
||||
self.handler.emit_db(&self);
|
||||
self.cancel();
|
||||
|
||||
if is_error {
|
||||
self.handler.bump_err_count();
|
||||
}
|
||||
|
||||
// if self.is_fatal() {
|
||||
// panic!(FatalError);
|
||||
// }
|
||||
}
|
||||
|
||||
/// Convenience function for internal use, clients should use one of the
|
||||
|
|
|
@ -588,6 +588,9 @@ impl Handler {
|
|||
// one:
|
||||
if self.emitted_diagnostics.borrow_mut().insert(diagnostic_hash) {
|
||||
self.emitter.borrow_mut().emit(db);
|
||||
if db.is_error() {
|
||||
self.bump_err_count();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,5 +42,5 @@ error: stability attributes may not be used outside of the standard library
|
|||
35 | #[rustc_deprecated = "1500"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
|
|
@ -42,5 +42,5 @@ error: stability attributes may not be used outside of the standard library
|
|||
35 | #[stable = "1300"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
|
|
@ -42,5 +42,5 @@ error: stability attributes may not be used outside of the standard library
|
|||
35 | #[unstable = "1200"] impl S { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
|
|
@ -8,5 +8,5 @@ error[E0502]: cannot borrow `*collection` as mutable because `collection` is als
|
|||
14 | }
|
||||
| - immutable borrow ends here
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -22,5 +22,5 @@ error: generic arguments in macro path
|
|||
20 | m!(MyTrait<>); //~ ERROR generic arguments in macro path
|
||||
| ^^
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
|
Loading…
Reference in a new issue