mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-02 15:32:06 +00:00
Make span_bug panic site useful again
This commit is contained in:
parent
3e5c468662
commit
e91084180e
@ -31,6 +31,7 @@
|
||||
#![feature(array_windows)]
|
||||
#![feature(assert_matches)]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(closure_track_caller)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(const_type_name)]
|
||||
#![feature(discriminant_kind)]
|
||||
|
@ -85,6 +85,7 @@ where
|
||||
|
||||
/// Allows access to the current `ImplicitCtxt` in a closure if one is available.
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub fn with_context_opt<F, R>(f: F) -> R
|
||||
where
|
||||
F: for<'a, 'tcx> FnOnce(Option<&ImplicitCtxt<'a, 'tcx>>) -> R,
|
||||
@ -147,9 +148,13 @@ where
|
||||
/// Allows access to the `TyCtxt` in the current `ImplicitCtxt`.
|
||||
/// The closure is passed None if there is no `ImplicitCtxt` available.
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub fn with_opt<F, R>(f: F) -> R
|
||||
where
|
||||
F: for<'tcx> FnOnce(Option<TyCtxt<'tcx>>) -> R,
|
||||
{
|
||||
with_context_opt(|opt_context| f(opt_context.map(|context| context.tcx)))
|
||||
with_context_opt(
|
||||
#[track_caller]
|
||||
|opt_context| f(opt_context.map(|context| context.tcx)),
|
||||
)
|
||||
}
|
||||
|
@ -28,14 +28,17 @@ fn opt_span_bug_fmt<S: Into<MultiSpan>>(
|
||||
args: fmt::Arguments<'_>,
|
||||
location: &Location<'_>,
|
||||
) -> ! {
|
||||
tls::with_opt(move |tcx| {
|
||||
let msg = format!("{location}: {args}");
|
||||
match (tcx, span) {
|
||||
(Some(tcx), Some(span)) => tcx.dcx().span_bug(span, msg),
|
||||
(Some(tcx), None) => tcx.dcx().bug(msg),
|
||||
(None, _) => panic_any(msg),
|
||||
}
|
||||
})
|
||||
tls::with_opt(
|
||||
#[track_caller]
|
||||
move |tcx| {
|
||||
let msg = format!("{location}: {args}");
|
||||
match (tcx, span) {
|
||||
(Some(tcx), Some(span)) => tcx.dcx().span_bug(span, msg),
|
||||
(Some(tcx), None) => tcx.dcx().bug(msg),
|
||||
(None, _) => panic_any(msg),
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// A query to trigger a delayed bug. Clearly, if one has a `tcx` one can already trigger a
|
||||
|
Loading…
Reference in New Issue
Block a user