diff options
| author | Ralf Jung <post@ralfj.de> | 2022-06-02 15:12:08 -0400 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2022-06-02 15:14:35 -0400 |
| commit | 7676f07d0e6e8d13575652ce7e71a67c1bbd871c (patch) | |
| tree | a31473c9de1149e67eb39b6d7c64eef5d569c8e9 /compiler/rustc_const_eval/src/interpret | |
| parent | 5e6bb83268518dcd74c96b5504f485b71e604e4c (diff) | |
| download | rust-7676f07d0e6e8d13575652ce7e71a67c1bbd871c.tar.gz rust-7676f07d0e6e8d13575652ce7e71a67c1bbd871c.zip | |
take back half-baked noaliasing check in Assignment
Diffstat (limited to 'compiler/rustc_const_eval/src/interpret')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/place.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/step.rs | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/place.rs b/compiler/rustc_const_eval/src/interpret/place.rs index 955480a1a74..ae7180b674f 100644 --- a/compiler/rustc_const_eval/src/interpret/place.rs +++ b/compiler/rustc_const_eval/src/interpret/place.rs @@ -869,8 +869,6 @@ where Ok(src_val) => { assert!(!src.layout.is_unsized(), "cannot have unsized immediates"); // Yay, we got a value that we can write directly. - // FIXME: Add a check to make sure that if `src` is indirect, - // it does not overlap with `dest`. return self.write_immediate_no_validate(*src_val, dest); } Err(mplace) => mplace, @@ -890,7 +888,7 @@ where }); assert_eq!(src.meta, dest.meta, "Can only copy between equally-sized instances"); - self.mem_copy(src.ptr, src.align, dest.ptr, dest.align, size, /*nonoverlapping*/ true) + self.mem_copy(src.ptr, src.align, dest.ptr, dest.align, size, /*nonoverlapping*/ false) } /// Copies the data from an operand to a place. The layouts may disagree, but they must diff --git a/compiler/rustc_const_eval/src/interpret/step.rs b/compiler/rustc_const_eval/src/interpret/step.rs index e6dfdf54a32..9ac86911c7d 100644 --- a/compiler/rustc_const_eval/src/interpret/step.rs +++ b/compiler/rustc_const_eval/src/interpret/step.rs @@ -158,6 +158,8 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { place: mir::Place<'tcx>, ) -> InterpResult<'tcx> { let dest = self.eval_place(place)?; + // FIXME: ensure some kind of non-aliasing between LHS and RHS? + // Also see https://github.com/rust-lang/rust/issues/68364. use rustc_middle::mir::Rvalue::*; match *rvalue { |
