From f6c2bc5c24fd08200c0e4438d981ca58dc71f488 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 29 May 2023 06:40:15 +0000 Subject: [PATCH] fix diagnostic message --- compiler/rustc_const_eval/src/errors.rs | 34 ++++++------------- .../rustc_mir_transform/src/const_prop.rs | 3 +- .../src/const_prop_lint.rs | 3 +- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/compiler/rustc_const_eval/src/errors.rs b/compiler/rustc_const_eval/src/errors.rs index c83f6cf13e0..eed3091d481 100644 --- a/compiler/rustc_const_eval/src/errors.rs +++ b/compiler/rustc_const_eval/src/errors.rs @@ -1,5 +1,3 @@ -use std::fmt; - use rustc_errors::{ DiagnosticArgValue, DiagnosticBuilder, DiagnosticMessage, EmissionGuarantee, Handler, IntoDiagnostic, @@ -427,24 +425,6 @@ pub struct UndefinedBehavior { pub raw_bytes: RawBytesNote, } -pub struct DebugExt(T); - -impl fmt::Debug for DebugExt { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let s = ty::tls::with(|tcx| { - let mut builder = tcx.sess.struct_allow(""); - let handler = &tcx.sess.parse_sess.span_diagnostic; - let message = self.0.diagnostic_message(); - self.0.add_args(handler, &mut builder); - let s = handler.eagerly_translate_to_string(message, builder.args()); - builder.cancel(); - s - }); - - f.write_str(&s) - } -} - pub trait ReportErrorExt { /// Returns the diagnostic message for this error. fn diagnostic_message(&self) -> DiagnosticMessage; @@ -454,11 +434,19 @@ fn add_args( builder: &mut DiagnosticBuilder<'_, G>, ); - fn debug(self) -> DebugExt + fn debug(self) -> String where Self: Sized, { - DebugExt(self) + ty::tls::with(move |tcx| { + let mut builder = tcx.sess.struct_allow(DiagnosticMessage::Str(String::new().into())); + let handler = &tcx.sess.parse_sess.span_diagnostic; + let message = self.diagnostic_message(); + self.add_args(handler, &mut builder); + let s = handler.eagerly_translate_to_string(message, builder.args()); + builder.cancel(); + s + }) } } @@ -481,7 +469,7 @@ fn diagnostic_message(&self) -> DiagnosticMessage { use crate::fluent_generated::*; use UndefinedBehaviorInfo::*; match self { - Ub(msg) => (&**msg).into(), + Ub(msg) => msg.clone().into(), Unreachable => const_eval_unreachable, BoundsCheckFailed { .. } => const_eval_bounds_check_failed, DivisionByZero => const_eval_division_by_zero, diff --git a/compiler/rustc_mir_transform/src/const_prop.rs b/compiler/rustc_mir_transform/src/const_prop.rs index c6d60039eb9..26d1201266f 100644 --- a/compiler/rustc_mir_transform/src/const_prop.rs +++ b/compiler/rustc_mir_transform/src/const_prop.rs @@ -4,6 +4,7 @@ use either::Right; use rustc_const_eval::const_eval::CheckAlignment; +use rustc_const_eval::ReportErrorExt; use rustc_data_structures::fx::FxHashSet; use rustc_hir::def::DefKind; use rustc_index::bit_set::BitSet; @@ -378,7 +379,7 @@ fn get_const(&self, place: Place<'tcx>) -> Option> { op } Err(e) => { - trace!("get_const failed: {:?}", e.debug()); + trace!("get_const failed: {:?}", e.into_kind().debug()); return None; } }; diff --git a/compiler/rustc_mir_transform/src/const_prop_lint.rs b/compiler/rustc_mir_transform/src/const_prop_lint.rs index 16826582372..759650fe4db 100644 --- a/compiler/rustc_mir_transform/src/const_prop_lint.rs +++ b/compiler/rustc_mir_transform/src/const_prop_lint.rs @@ -9,6 +9,7 @@ use rustc_const_eval::interpret::{ self, InterpCx, InterpResult, LocalValue, MemoryKind, OpTy, Scalar, StackPopCleanup, }; +use rustc_const_eval::ReportErrorExt; use rustc_hir::def::DefKind; use rustc_hir::HirId; use rustc_index::bit_set::BitSet; @@ -232,7 +233,7 @@ fn get_const(&self, place: Place<'tcx>) -> Option> { op } Err(e) => { - trace!("get_const failed: {:?}", e.debug()); + trace!("get_const failed: {:?}", e.into_kind().debug()); return None; } };