@@ -541,6 +541,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
541
541
match self . alloc_map . get_or ( id, || Err ( ( ) ) ) {
542
542
Ok ( ( _, alloc) ) => Ok ( ( Size :: from_bytes ( alloc. bytes . len ( ) as u64 ) , alloc. align ) ) ,
543
543
Err ( ( ) ) => {
544
+ // Not a local allocation, check the global `tcx.alloc_map`.
545
+
544
546
// Can't do this in the match argument, we may get cycle errors since the lock would
545
547
// be held throughout the match.
546
548
let alloc = self . tcx . alloc_map . lock ( ) . get ( id) ;
@@ -549,20 +551,22 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
549
551
// Use size and align of the type
550
552
let ty = self . tcx . type_of ( did) ;
551
553
let layout = self . tcx . layout_of ( ParamEnv :: empty ( ) . and ( ty) ) . unwrap ( ) ;
552
- return Ok ( ( layout. size , layout. align . abi ) ) ;
554
+ Ok ( ( layout. size , layout. align . abi ) )
553
555
} ,
554
556
Some ( GlobalAlloc :: Memory ( alloc) ) =>
555
557
// Need to duplicate the logic here, because the global allocations have
556
558
// different associated types than the interpreter-local ones
557
559
Ok ( ( Size :: from_bytes ( alloc. bytes . len ( ) as u64 ) , alloc. align ) ) ,
558
- Some ( GlobalAlloc :: Function ( _) ) => if let AllocCheck :: Dereferencable = liveness {
559
- // The caller requested no function pointers.
560
- return err ! ( DerefFunctionPointer ) ;
561
- } else {
562
- return Ok ( ( Size :: ZERO , Align :: from_bytes ( 1 ) . unwrap ( ) ) ) ;
560
+ Some ( GlobalAlloc :: Function ( _) ) => {
561
+ if let AllocCheck :: Dereferencable = liveness {
562
+ // The caller requested no function pointers.
563
+ err ! ( DerefFunctionPointer )
564
+ } else {
565
+ Ok ( ( Size :: ZERO , Align :: from_bytes ( 1 ) . unwrap ( ) ) )
566
+ }
563
567
} ,
564
568
// The rest must be dead.
565
- None => return if let AllocCheck :: MaybeDead = liveness {
569
+ None => if let AllocCheck :: MaybeDead = liveness {
566
570
// Deallocated pointers are allowed, we should be able to find
567
571
// them in the map.
568
572
Ok ( * self . dead_alloc_map . get ( & id)
0 commit comments