diff options
| author | Ralf Jung <post@ralfj.de> | 2021-05-17 13:38:15 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2021-05-18 19:33:55 +0200 |
| commit | d5ccf68a1076f0ec14e86cfbacb6cbe7f5fc923a (patch) | |
| tree | ff14d104c72c58b8666d21c81c29264e8d98aa05 | |
| parent | 563ab4a106928a9f9a27618ad6598fd255dc3555 (diff) | |
| download | rust-d5ccf68a1076f0ec14e86cfbacb6cbe7f5fc923a.tar.gz rust-d5ccf68a1076f0ec14e86cfbacb6cbe7f5fc923a.zip | |
fix mplace_access_checked with forced alignment
| -rw-r--r-- | compiler/rustc_mir/src/interpret/place.rs | 5 |
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(); |
