mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Check the correct arena
This commit is contained in:
parent
9654ae9c99
commit
03b892860d
@ -119,6 +119,11 @@ impl<T> Default for TypedArena<T> {
|
||||
}
|
||||
|
||||
impl<T> TypedArena<T> {
|
||||
pub fn in_arena(&self, ptr: *const T) -> bool {
|
||||
let ptr = ptr as *const T as *mut T;
|
||||
|
||||
self.chunks.borrow().iter().any(|chunk| chunk.start() <= ptr && ptr < chunk.end())
|
||||
}
|
||||
/// Allocates an object in the `TypedArena`, returning a reference to it.
|
||||
#[inline]
|
||||
pub fn alloc(&self, object: T) -> &mut T {
|
||||
|
@ -1762,7 +1762,7 @@ nop_list_lift!{Kind<'a> => Kind<'tcx>}
|
||||
impl<'a, 'tcx> Lift<'tcx> for &'a mir::interpret::Allocation {
|
||||
type Lifted = &'tcx mir::interpret::Allocation;
|
||||
fn lift_to_tcx<'b, 'gcx>(&self, tcx: TyCtxt<'b, 'gcx, 'tcx>) -> Option<Self::Lifted> {
|
||||
assert!(tcx.global_interners.arena.in_arena(*self as *const _));
|
||||
assert!(tcx.global_arenas.const_allocs.in_arena(*self as *const _));
|
||||
Some(unsafe { mem::transmute(*self) })
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user