Rollup merge of #87761 - rusticstuff:rustc_error_overflow, r=Mark-Simulacrum

Fix overflow in rustc happening if the `err_count()` is reduced in a stage.

This can happen if stashed diagnostics are removed or replaced with fewer errors. The semantics stay the same if built without overflow checks. Fixes #84219.

Background: I came across this independently by running `RUSTFLAGS="-C overflow-checks=on" ./x.py test`. Fixing this will allow us to move on and find further overflow errors with testing or fuzzing.
This commit is contained in:
Yuki Okushi 2021-08-07 01:46:32 +09:00 committed by GitHub
commit 3b0e797ee6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -450,8 +450,7 @@ impl Session {
{
let old_count = self.err_count();
let result = f();
let errors = self.err_count() - old_count;
if errors == 0 { Ok(result) } else { Err(ErrorReported) }
if self.err_count() == old_count { Ok(result) } else { Err(ErrorReported) }
}
pub fn span_warn<S: Into<MultiSpan>>(&self, sp: S, msg: &str) {
self.diagnostic().span_warn(sp, msg)