1
Fork 0

Support non-scalar constants.

This commit is contained in:
Camille GILLOT 2023-05-13 12:30:40 +00:00
parent 68c2f5ba0f
commit 6ad6b4381c
12 changed files with 259 additions and 22 deletions

View file

@ -445,9 +445,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
#[inline(always)]
pub fn cur_span(&self) -> Span {
// This deliberately does *not* honor `requires_caller_location` since it is used for much
// more than just panics.
self.stack().last().map_or(self.tcx.span, |f| f.current_span())
M::cur_span(self)
}
#[inline(always)]

View file

@ -11,6 +11,7 @@ use rustc_middle::mir;
use rustc_middle::ty::layout::TyAndLayout;
use rustc_middle::ty::{self, Ty, TyCtxt};
use rustc_span::def_id::DefId;
use rustc_span::Span;
use rustc_target::abi::{Align, Size};
use rustc_target::spec::abi::Abi as CallAbi;
@ -440,6 +441,15 @@ pub trait Machine<'mir, 'tcx: 'mir>: Sized {
frame: Frame<'mir, 'tcx, Self::Provenance>,
) -> InterpResult<'tcx, Frame<'mir, 'tcx, Self::Provenance, Self::FrameExtra>>;
fn cur_span(ecx: &InterpCx<'mir, 'tcx, Self>) -> Span
where
'tcx: 'mir,
{
// This deliberately does *not* honor `requires_caller_location` since it is used for much
// more than just panics.
Self::stack(ecx).last().map_or(ecx.tcx.span, |f| f.current_span())
}
/// Borrow the current thread's stack.
fn stack<'a>(
ecx: &'a InterpCx<'mir, 'tcx, Self>,