about summary refs log tree commit diff
path: root/src/librustc_errors
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2020-03-02 13:42:41 +0100
committerGitHub <noreply@github.com>2020-03-02 13:42:41 +0100
commit0255561dea9bd0e7e7ff88d88dbd969e29a1ece5 (patch)
treebc5c51248146286118ae652d5b1d32625cbf4e73 /src/librustc_errors
parent74a8d8f44e55db0a6d5c2e389adbfe326645177c (diff)
parentdf20036848b7e3607b988cdee18c861964423f65 (diff)
Rollup merge of #69623 - Centril:fix-69396-tmp, r=petrochenkov
stash API: remove panic to fix ICE.

Implements the temporary solution suggested in https://github.com/rust-lang/rust/pull/69537#issuecomment-593143975.
Fixes https://github.com/rust-lang/rust/issues/69396.

r? @petrochenkov
Diffstat (limited to 'src/librustc_errors')
-rw-r--r--src/librustc_errors/lib.rs18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs
index bc943f2c09c..5b00087de6f 100644
--- a/src/librustc_errors/lib.rs
+++ b/src/librustc_errors/lib.rs
@@ -444,22 +444,12 @@ impl Handler {
     }
 
     /// Stash a given diagnostic with the given `Span` and `StashKey` as the key for later stealing.
-    /// If the diagnostic with this `(span, key)` already exists, this will result in an ICE.
     pub fn stash_diagnostic(&self, span: Span, key: StashKey, diag: Diagnostic) {
         let mut inner = self.inner.borrow_mut();
-        if let Some(mut old_diag) = inner.stashed_diagnostics.insert((span, key), diag) {
-            // We are removing a previously stashed diagnostic which should not happen.
-            old_diag.level = Bug;
-            old_diag.note(&format!(
-                "{}:{}: already existing stashed diagnostic with (span = {:?}, key = {:?})",
-                file!(),
-                line!(),
-                span,
-                key
-            ));
-            inner.emit_diag_at_span(old_diag, span);
-            panic!(ExplicitBug);
-        }
+        // FIXME(Centril, #69537): Consider reintroducing panic on overwriting a stashed diagnostic
+        // if/when we have a more robust macro-friendly replacement for `(span, key)` as a key.
+        // See the PR for a discussion.
+        inner.stashed_diagnostics.insert((span, key), diag);
     }
 
     /// Steal a previously stashed diagnostic with the given `Span` and `StashKey` as the key.