From 230e40644b5c112228a0b43d07fda552133f00b8 Mon Sep 17 00:00:00 2001
From: Santiago Pastorino <spastorino@gmail.com>
Date: Fri, 24 Apr 2020 01:03:20 -0300
Subject: [PATCH 1/2] Fix off by one error for delay_span_bug

delay_span_bug bumps error_count after checking treat_err_as_bug
---
 src/librustc_errors/lib.rs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs
index 151241fdb0b5f..e4a560e434aaa 100644
--- a/src/librustc_errors/lib.rs
+++ b/src/librustc_errors/lib.rs
@@ -869,7 +869,10 @@ impl HandlerInner {
     }
 
     fn delay_span_bug(&mut self, sp: impl Into<MultiSpan>, msg: &str) {
-        if self.treat_err_as_bug() {
+        // This is technically `self.treat_err_as_bug()` but `delay_span_bug` is called before
+        // incrementing `err_count` by one, so we need to +1 the comparing.
+        // FIXME: Would be nice to increment err_count in a more coherent way.
+        if self.flags.treat_err_as_bug.map(|c| self.err_count() + 1 >= c).unwrap_or(false) {
             // FIXME: don't abort here if report_delayed_bugs is off
             self.span_bug(sp, msg);
         }

From 3fe280451bcc7dc2a2debf71a4d5747df0f0e0fd Mon Sep 17 00:00:00 2001
From: Santiago Pastorino <spastorino@gmail.com>
Date: Fri, 24 Apr 2020 16:08:22 -0300
Subject: [PATCH 2/2] Add test for delay_span_bug and -Ztrear-err-as-bug

---
 src/test/run-make-fulldeps/treat-err-as-bug/Makefile          | 2 ++
 src/test/run-make-fulldeps/treat-err-as-bug/delay_span_bug.rs | 4 ++++
 2 files changed, 6 insertions(+)
 create mode 100644 src/test/run-make-fulldeps/treat-err-as-bug/delay_span_bug.rs

diff --git a/src/test/run-make-fulldeps/treat-err-as-bug/Makefile b/src/test/run-make-fulldeps/treat-err-as-bug/Makefile
index 9b3bcef2faf32..57cac76aec2a5 100644
--- a/src/test/run-make-fulldeps/treat-err-as-bug/Makefile
+++ b/src/test/run-make-fulldeps/treat-err-as-bug/Makefile
@@ -3,3 +3,5 @@
 all:
 	$(RUSTC) err.rs -Z treat-err-as-bug 2>&1 \
 	    | $(CGREP) "panicked at 'aborting due to \`-Z treat-err-as-bug=1\`'"
+	$(RUSTC) delay_span_bug.rs -Z treat-err-as-bug 2>&1 \
+	    | $(CGREP) "panicked at 'aborting due to \`-Z treat-err-as-bug=1\`'"
diff --git a/src/test/run-make-fulldeps/treat-err-as-bug/delay_span_bug.rs b/src/test/run-make-fulldeps/treat-err-as-bug/delay_span_bug.rs
new file mode 100644
index 0000000000000..dad33e498b52f
--- /dev/null
+++ b/src/test/run-make-fulldeps/treat-err-as-bug/delay_span_bug.rs
@@ -0,0 +1,4 @@
+#![feature(rustc_attrs)]
+
+#[rustc_error(delay_span_bug_from_inside_query)]
+fn main() {}