fix Stacked Borrows interaction with dyn*

This commit is contained in:
Ralf Jung 2023-02-10 22:01:43 +01:00
parent 57056d7f8f
commit ad6dd60396
2 changed files with 4 additions and 2 deletions

View File

@ -478,6 +478,10 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
} else if matches!(v.layout.fields, FieldsShape::Union(..)) {
// A (non-frozen) union. We fall back to whatever the type says.
(self.unsafe_cell_action)(v)
} else if matches!(v.layout.ty.kind(), ty::Dynamic(_, _, ty::DynStar)) {
// This needs to read the vtable pointer to proceed type-driven, but we don't
// want to reentrantly read from memory here.
(self.unsafe_cell_action)(v)
} else {
// We want to not actually read from memory for this visit. So, before
// walking this value, we have to make sure it is not a

View File

@ -1,5 +1,3 @@
// Dyn* handling leads to some funky reentrancy in Stacked Borrows, for some reason
//@compile-flags: -Zmiri-disable-stacked-borrows
#![feature(dyn_star)]
#![allow(incomplete_features)]