Skip to content

Commit

Permalink
Only bump error count when we are sure that the diagnostic is not a r…
Browse files Browse the repository at this point in the history
…epetition.

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
  • Loading branch information
ereslibre committed Jan 2, 2018
1 parent 687d3d1 commit 063607e
Show file tree
Hide file tree
Showing 8 changed files with 14 additions and 20 deletions.
3 changes: 0 additions & 3 deletions src/librustc_errors/diagnostic.rs
Expand Up @@ -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;
}
Expand Down
18 changes: 6 additions & 12 deletions src/librustc_errors/diagnostic_builder.rs
Expand Up @@ -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 |
Expand All @@ -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
Expand Down
3 changes: 3 additions & 0 deletions src/librustc_errors/lib.rs
Expand Up @@ -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();
}
}
}
}
Expand Down
Expand Up @@ -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

Expand Up @@ -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

Expand Up @@ -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

2 changes: 1 addition & 1 deletion src/test/ui/issue-42106.stderr
Expand Up @@ -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

2 changes: 1 addition & 1 deletion src/test/ui/span/macro-ty-params.stderr
Expand Up @@ -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

0 comments on commit 063607e

Please sign in to comment.