Skip to content

Commit

Permalink
make ENFORCE_VALIDITY a function
Browse files Browse the repository at this point in the history
miri needs this extra flexibility
  • Loading branch information
RalfJung committed Oct 13, 2018
1 parent 3272c98 commit 69576fc
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 6 deletions.
6 changes: 5 additions & 1 deletion src/librustc_mir/const_eval.rs
Expand Up @@ -343,7 +343,11 @@ impl<'a, 'mir, 'tcx> interpret::Machine<'a, 'mir, 'tcx>
type MemoryMap = FxHashMap<AllocId, (MemoryKind<!>, Allocation<()>)>;

const STATIC_KIND: Option<!> = None; // no copying of statics allowed
const ENFORCE_VALIDITY: bool = false; // for now, we don't

#[inline(always)]
fn enforce_validity(_ecx: &EvalContext<'a, 'mir, 'tcx, Self>) -> bool {
false // for now, we don't enforce validity
}

fn find_fn(
ecx: &mut EvalContext<'a, 'mir, 'tcx, Self>,
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_mir/interpret/eval_context.rs
Expand Up @@ -524,7 +524,7 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tc
}
// Validate the return value.
if let Some(return_place) = frame.return_place {
if M::ENFORCE_VALIDITY {
if M::enforce_validity(self) {
// Data got changed, better make sure it matches the type!
// It is still possible that the return place held invalid data while
// the function is running, but that's okay because nobody could have
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_mir/interpret/machine.rs
Expand Up @@ -86,7 +86,7 @@ pub trait Machine<'a, 'mir, 'tcx>: Sized {
const STATIC_KIND: Option<Self::MemoryKinds>;

/// Whether to enforce the validity invariant
const ENFORCE_VALIDITY: bool;
fn enforce_validity(ecx: &EvalContext<'a, 'mir, 'tcx, Self>) -> bool;

/// Called before a basic block terminator is executed.
/// You can use this to detect endlessly running programs.
Expand Down
6 changes: 3 additions & 3 deletions src/librustc_mir/interpret/place.rs
Expand Up @@ -607,7 +607,7 @@ where
) -> EvalResult<'tcx> {
self.write_value_no_validate(src_val, dest)?;

if M::ENFORCE_VALIDITY {
if M::enforce_validity(self) {
// Data got changed, better make sure it matches the type!
self.validate_operand(self.place_to_op(dest)?, &mut vec![], None, /*const_mode*/false)?;
}
Expand Down Expand Up @@ -729,7 +729,7 @@ where
) -> EvalResult<'tcx> {
self.copy_op_no_validate(src, dest)?;

if M::ENFORCE_VALIDITY {
if M::enforce_validity(self) {
// Data got changed, better make sure it matches the type!
self.validate_operand(self.place_to_op(dest)?, &mut vec![], None, /*const_mode*/false)?;
}
Expand Down Expand Up @@ -807,7 +807,7 @@ where
PlaceTy::from(MPlaceTy { mplace: *dest, layout: src.layout }),
)?;

if M::ENFORCE_VALIDITY {
if M::enforce_validity(self) {
// Data got changed, better make sure it matches the type!
self.validate_operand(dest.into(), &mut vec![], None, /*const_mode*/false)?;
}
Expand Down

0 comments on commit 69576fc

Please sign in to comment.