about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2021-05-17 13:38:15 +0200
committerRalf Jung <post@ralfj.de>2021-05-18 19:33:55 +0200
commitd5ccf68a1076f0ec14e86cfbacb6cbe7f5fc923a (patch)
treeff14d104c72c58b8666d21c81c29264e8d98aa05
parent563ab4a106928a9f9a27618ad6598fd255dc3555 (diff)
downloadrust-d5ccf68a1076f0ec14e86cfbacb6cbe7f5fc923a.tar.gz
rust-d5ccf68a1076f0ec14e86cfbacb6cbe7f5fc923a.zip
fix mplace_access_checked with forced alignment
-rw-r--r--compiler/rustc_mir/src/interpret/place.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/compiler/rustc_mir/src/interpret/place.rs b/compiler/rustc_mir/src/interpret/place.rs
index 8c4b22f6949..ef603b51554 100644
--- a/compiler/rustc_mir/src/interpret/place.rs
+++ b/compiler/rustc_mir/src/interpret/place.rs
@@ -374,8 +374,9 @@ where
             .size_and_align_of_mplace(&place)?
             .unwrap_or((place.layout.size, place.layout.align.abi));
         assert!(place.mplace.align <= align, "dynamic alignment less strict than static one?");
-        // Check (stricter) dynamic alignment, unless forced otherwise.
-        place.mplace.align = force_align.unwrap_or(align);
+        let align = force_align.unwrap_or(align);
+        // Record new (stricter, unless forced) alignment requirement in place.
+        place.mplace.align = align;
         // When dereferencing a pointer, it must be non-null, aligned, and live.
         if let Some(ptr) = self.memory.check_ptr_access(place.ptr, size, align)? {
             place.mplace.ptr = ptr.into();