diff options
| author | Ralf Jung <post@ralfj.de> | 2023-09-06 16:36:00 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2023-09-06 16:36:00 +0200 |
| commit | 73d8dcb803aad67df31abe99f573a2320282bc60 (patch) | |
| tree | dcfd2089e9aacf3422316765901ceec58108ee8a /compiler/rustc_const_eval/src | |
| parent | ab45885dec2a6552cb060a5b7183653baaecd580 (diff) | |
| download | rust-73d8dcb803aad67df31abe99f573a2320282bc60.tar.gz rust-73d8dcb803aad67df31abe99f573a2320282bc60.zip | |
miri: catch function calls where the argument is caller-invalid / the return value callee-invalid
Diffstat (limited to 'compiler/rustc_const_eval/src')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/place.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/place.rs b/compiler/rustc_const_eval/src/interpret/place.rs index d8ad82d3da0..90f2b470179 100644 --- a/compiler/rustc_const_eval/src/interpret/place.rs +++ b/compiler/rustc_const_eval/src/interpret/place.rs @@ -796,6 +796,13 @@ where dest: &impl Writeable<'tcx, M::Provenance>, allow_transmute: bool, ) -> InterpResult<'tcx> { + // Generally for transmutation, data must be valid both at the old and new type. + // But if the types are the same, the 2nd validation below suffices. + if src.layout().ty != dest.layout().ty && M::enforce_validity(self, src.layout()) { + self.validate_operand(&src.to_op(self)?)?; + } + + // Do the actual copy. self.copy_op_no_validate(src, dest, allow_transmute)?; if M::enforce_validity(self, dest.layout()) { |
