fix Stacked Borrows interaction with dyn*
This commit is contained in:
parent
57056d7f8f
commit
ad6dd60396
2 changed files with 4 additions and 2 deletions
|
@ -478,6 +478,10 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
|
||||||
} else if matches!(v.layout.fields, FieldsShape::Union(..)) {
|
} else if matches!(v.layout.fields, FieldsShape::Union(..)) {
|
||||||
// A (non-frozen) union. We fall back to whatever the type says.
|
// A (non-frozen) union. We fall back to whatever the type says.
|
||||||
(self.unsafe_cell_action)(v)
|
(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 {
|
} else {
|
||||||
// We want to not actually read from memory for this visit. So, before
|
// 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
|
// walking this value, we have to make sure it is not a
|
||||||
|
|
|
@ -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)]
|
#![feature(dyn_star)]
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue