Skip to content

Commit 83dec62

Browse files
committed
Add a layout argument to enforce_validity.
This is in preparation of checking the validity only of certain types.
1 parent 84c47b8 commit 83dec62

File tree

6 files changed

+11
-9
lines changed

6 files changed

+11
-9
lines changed

compiler/rustc_const_eval/src/const_eval/machine.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use rustc_hir::def::DefKind;
22
use rustc_hir::{LangItem, CRATE_HIR_ID};
33
use rustc_middle::mir;
44
use rustc_middle::mir::interpret::PointerArithmetic;
5-
use rustc_middle::ty::layout::FnAbiOf;
5+
use rustc_middle::ty::layout::{FnAbiOf, TyAndLayout};
66
use rustc_middle::ty::{self, Ty, TyCtxt};
77
use rustc_session::lint::builtin::INVALID_ALIGNMENT;
88
use std::borrow::Borrow;
@@ -335,7 +335,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter<'mir,
335335
}
336336

337337
#[inline(always)]
338-
fn enforce_validity(ecx: &InterpCx<'mir, 'tcx, Self>) -> bool {
338+
fn enforce_validity(ecx: &InterpCx<'mir, 'tcx, Self>, _layout: TyAndLayout<'tcx>) -> bool {
339339
ecx.tcx.sess.opts.unstable_opts.extra_const_ub_checks
340340
}
341341

compiler/rustc_const_eval/src/interpret/machine.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::hash::Hash;
88

99
use rustc_ast::{InlineAsmOptions, InlineAsmTemplatePiece};
1010
use rustc_middle::mir;
11+
use rustc_middle::ty::layout::TyAndLayout;
1112
use rustc_middle::ty::{self, Ty, TyCtxt};
1213
use rustc_span::def_id::DefId;
1314
use rustc_target::abi::{Align, Size};
@@ -145,8 +146,8 @@ pub trait Machine<'mir, 'tcx>: Sized {
145146
check: CheckAlignment,
146147
) -> InterpResult<'tcx, ()>;
147148

148-
/// Whether to enforce the validity invariant
149-
fn enforce_validity(ecx: &InterpCx<'mir, 'tcx, Self>) -> bool;
149+
/// Whether to enforce the validity invariant for a specific layout.
150+
fn enforce_validity(ecx: &InterpCx<'mir, 'tcx, Self>, layout: TyAndLayout<'tcx>) -> bool;
150151

151152
/// Whether function calls should be [ABI](CallAbi)-checked.
152153
fn enforce_abi(_ecx: &InterpCx<'mir, 'tcx, Self>) -> bool {

compiler/rustc_const_eval/src/interpret/place.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ where
461461
) -> InterpResult<'tcx> {
462462
self.write_immediate_no_validate(src, dest)?;
463463

464-
if M::enforce_validity(self) {
464+
if M::enforce_validity(self, dest.layout) {
465465
// Data got changed, better make sure it matches the type!
466466
self.validate_operand(&self.place_to_op(dest)?)?;
467467
}
@@ -616,7 +616,7 @@ where
616616
) -> InterpResult<'tcx> {
617617
self.copy_op_no_validate(src, dest, allow_transmute)?;
618618

619-
if M::enforce_validity(self) {
619+
if M::enforce_validity(self, dest.layout) {
620620
// Data got changed, better make sure it matches the type!
621621
self.validate_operand(&self.place_to_op(dest)?)?;
622622
}

compiler/rustc_mir_transform/src/const_prop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ impl<'mir, 'tcx> interpret::Machine<'mir, 'tcx> for ConstPropMachine<'mir, 'tcx>
174174
}
175175

176176
#[inline(always)]
177-
fn enforce_validity(_ecx: &InterpCx<'mir, 'tcx, Self>) -> bool {
177+
fn enforce_validity(_ecx: &InterpCx<'mir, 'tcx, Self>, _layout: TyAndLayout<'tcx>) -> bool {
178178
false // for now, we don't enforce validity
179179
}
180180
fn alignment_check_failed(

compiler/rustc_mir_transform/src/dataflow_const_prop.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use rustc_data_structures::fx::FxHashMap;
88
use rustc_hir::def::DefKind;
99
use rustc_middle::mir::visit::{MutVisitor, Visitor};
1010
use rustc_middle::mir::*;
11+
use rustc_middle::ty::layout::TyAndLayout;
1112
use rustc_middle::ty::{self, Ty, TyCtxt};
1213
use rustc_mir_dataflow::value_analysis::{Map, State, TrackElem, ValueAnalysis, ValueOrPlace};
1314
use rustc_mir_dataflow::{lattice::FlatSet, Analysis, ResultsVisitor, SwitchIntEdgeEffects};
@@ -548,7 +549,7 @@ impl<'mir, 'tcx> rustc_const_eval::interpret::Machine<'mir, 'tcx> for DummyMachi
548549
unimplemented!()
549550
}
550551

551-
fn enforce_validity(_ecx: &InterpCx<'mir, 'tcx, Self>) -> bool {
552+
fn enforce_validity(_ecx: &InterpCx<'mir, 'tcx, Self>, _layout: TyAndLayout<'tcx>) -> bool {
552553
unimplemented!()
553554
}
554555
fn alignment_check_failed(

src/tools/miri/src/machine.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ impl<'mir, 'tcx> Machine<'mir, 'tcx> for MiriMachine<'mir, 'tcx> {
812812
}
813813

814814
#[inline(always)]
815-
fn enforce_validity(ecx: &MiriInterpCx<'mir, 'tcx>) -> bool {
815+
fn enforce_validity(ecx: &MiriInterpCx<'mir, 'tcx>, _layout: TyAndLayout<'tcx>) -> bool {
816816
ecx.machine.validate
817817
}
818818

0 commit comments

Comments
 (0)