From b48d944165dd878b887273898b7e4e4b4163c786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Fern=C3=A1ndez=20L=C3=B3pez?= Date: Sat, 6 Jan 2018 13:33:20 +0100 Subject: [PATCH] Clean emitted diagnostics when `reset_err_count` is called. When external tools like `rustfmt` calls to `reset_err_count` for handler reusing, it will set the error count on the handler to 0, but since https://github.com/rust-lang/rust/pull/47146 the handler will contain status that will prevent the error count to be bumped if this handler is reused. This caused `rustfmt` idempotency tests to fail: https://github.com/rust-lang-nursery/rustfmt/issues/2338 Fixes: https://github.com/rust-lang-nursery/rustfmt/issues/2338 --- src/librustc_errors/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index c4db39fae8619..c48f1761f28b7 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -310,9 +310,13 @@ impl Handler { self.continue_after_error.set(continue_after_error); } - // NOTE: DO NOT call this function from rustc, as it relies on `err_count` being non-zero - // if an error happened to avoid ICEs. This function should only be called from tools. + /// Resets the diagnostic error count as well as the cached emitted diagnostics. + /// + /// NOTE: DO NOT call this function from rustc. It is only meant to be called from external + /// tools that want to reuse a `Parser` cleaning the previously emitted diagnostics as well as + /// the overall count of emitted error diagnostics. pub fn reset_err_count(&self) { + self.emitted_diagnostics.replace(FxHashSet()); self.err_count.store(0, SeqCst); }