diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-03-03 17:50:13 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-03 17:50:13 +0900 |
| commit | ef311d5ab41e4ada8de7411e4f47737409f3e6d5 (patch) | |
| tree | 794ee07ac095f8ee8c1f1ebe2423873768f7fc58 | |
| parent | c9d421f5c0a1ab319cfea18c9bd4f62cddc6d0e8 (diff) | |
| parent | 99a595e406077375824a1316d4d669ad1f0a15f8 (diff) | |
| download | rust-ef311d5ab41e4ada8de7411e4f47737409f3e6d5.tar.gz rust-ef311d5ab41e4ada8de7411e4f47737409f3e6d5.zip | |
Rollup merge of #69628 - nnethercote:fix-DiagnosticBuilder-into_diagnostic-leak, r=Centril
Fix a leak in `DiagnosticBuilder::into_diagnostic`. Fixes #69600. r? @Centril
| -rw-r--r-- | src/librustc_errors/diagnostic_builder.rs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/librustc_errors/diagnostic_builder.rs b/src/librustc_errors/diagnostic_builder.rs index 39f585231ee..008d2e92418 100644 --- a/src/librustc_errors/diagnostic_builder.rs +++ b/src/librustc_errors/diagnostic_builder.rs @@ -136,12 +136,11 @@ impl<'a> DiagnosticBuilder<'a> { let handler = self.0.handler; - // We need to use `ptr::read` because `DiagnosticBuilder` implements `Drop`. - let diagnostic; - unsafe { - diagnostic = std::ptr::read(&self.0.diagnostic); - std::mem::forget(self); - }; + // We must use `Level::Cancelled` for `dummy` to avoid an ICE about an + // unused diagnostic. + let dummy = Diagnostic::new(Level::Cancelled, ""); + let diagnostic = std::mem::replace(&mut self.0.diagnostic, dummy); + // Logging here is useful to help track down where in logs an error was // actually emitted. debug!("buffer: diagnostic={:?}", diagnostic); |
