fix diagnostic message
This commit is contained in:
parent
f964b46451
commit
f6c2bc5c24
@ -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,
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user