fix diagnostic message

This commit is contained in:
Deadbeef 2023-05-29 06:40:15 +00:00
parent f964b46451
commit f6c2bc5c24
3 changed files with 15 additions and 25 deletions

View File

@ -1,5 +1,3 @@
use std::fmt;
use rustc_errors::{ use rustc_errors::{
DiagnosticArgValue, DiagnosticBuilder, DiagnosticMessage, EmissionGuarantee, Handler, DiagnosticArgValue, DiagnosticBuilder, DiagnosticMessage, EmissionGuarantee, Handler,
IntoDiagnostic, IntoDiagnostic,
@ -427,24 +425,6 @@ pub struct UndefinedBehavior {
pub raw_bytes: RawBytesNote, pub raw_bytes: RawBytesNote,
} }
pub struct DebugExt<T>(T);
impl<T: ReportErrorExt> fmt::Debug for DebugExt<T> {
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 { pub trait ReportErrorExt {
/// Returns the diagnostic message for this error. /// Returns the diagnostic message for this error.
fn diagnostic_message(&self) -> DiagnosticMessage; fn diagnostic_message(&self) -> DiagnosticMessage;
@ -454,11 +434,19 @@ fn add_args<G: EmissionGuarantee>(
builder: &mut DiagnosticBuilder<'_, G>, builder: &mut DiagnosticBuilder<'_, G>,
); );
fn debug(self) -> DebugExt<Self> fn debug(self) -> String
where where
Self: Sized, 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 crate::fluent_generated::*;
use UndefinedBehaviorInfo::*; use UndefinedBehaviorInfo::*;
match self { match self {
Ub(msg) => (&**msg).into(), Ub(msg) => msg.clone().into(),
Unreachable => const_eval_unreachable, Unreachable => const_eval_unreachable,
BoundsCheckFailed { .. } => const_eval_bounds_check_failed, BoundsCheckFailed { .. } => const_eval_bounds_check_failed,
DivisionByZero => const_eval_division_by_zero, DivisionByZero => const_eval_division_by_zero,

View File

@ -4,6 +4,7 @@
use either::Right; use either::Right;
use rustc_const_eval::const_eval::CheckAlignment; use rustc_const_eval::const_eval::CheckAlignment;
use rustc_const_eval::ReportErrorExt;
use rustc_data_structures::fx::FxHashSet; use rustc_data_structures::fx::FxHashSet;
use rustc_hir::def::DefKind; use rustc_hir::def::DefKind;
use rustc_index::bit_set::BitSet; use rustc_index::bit_set::BitSet;
@ -378,7 +379,7 @@ fn get_const(&self, place: Place<'tcx>) -> Option<OpTy<'tcx>> {
op op
} }
Err(e) => { Err(e) => {
trace!("get_const failed: {:?}", e.debug()); trace!("get_const failed: {:?}", e.into_kind().debug());
return None; return None;
} }
}; };

View File

@ -9,6 +9,7 @@
use rustc_const_eval::interpret::{ use rustc_const_eval::interpret::{
self, InterpCx, InterpResult, LocalValue, MemoryKind, OpTy, Scalar, StackPopCleanup, self, InterpCx, InterpResult, LocalValue, MemoryKind, OpTy, Scalar, StackPopCleanup,
}; };
use rustc_const_eval::ReportErrorExt;
use rustc_hir::def::DefKind; use rustc_hir::def::DefKind;
use rustc_hir::HirId; use rustc_hir::HirId;
use rustc_index::bit_set::BitSet; use rustc_index::bit_set::BitSet;
@ -232,7 +233,7 @@ fn get_const(&self, place: Place<'tcx>) -> Option<OpTy<'tcx>> {
op op
} }
Err(e) => { Err(e) => {
trace!("get_const failed: {:?}", e.debug()); trace!("get_const failed: {:?}", e.into_kind().debug());
return None; return None;
} }
}; };