From 50987e3697d58a1d1e48a778d1e5875d6adea657 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Wed, 6 Jul 2016 10:58:51 +0200 Subject: [PATCH] some methods to check pointers for correct alignment --- src/memory.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/memory.rs b/src/memory.rs index ca041dc1d95..4afcf05d67a 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -51,6 +51,25 @@ fn zst_ptr() -> Self { offset: 0, } } + pub fn is_aligned_to(&self, align: usize) -> bool { + self.offset % align == 0 + } + pub fn check_align(&self, align: usize) -> EvalResult<'static, ()> { + if self.is_aligned_to(align) { + Ok(()) + } else { + let mut best = self.offset; + let mut i = 1; + while best > 0 && (best & 1 == 0) { + best >>= 1; + i <<= 1; + } + Err(EvalError::AlignmentCheckFailed { + required: align, + has: i, + }) + } + } } #[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)] -- GitLab