From a0de244487c53ab632c3e90725d4041c6393fcf8 Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Sun, 26 Apr 2020 23:29:42 -0700 Subject: [PATCH] pleay nice with alignment Signed-off-by: Nikolaj Bjorner --- src/muz/rel/dl_sparse_table.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/muz/rel/dl_sparse_table.h b/src/muz/rel/dl_sparse_table.h index 46f6f3932..ebeb86fa6 100644 --- a/src/muz/rel/dl_sparse_table.h +++ b/src/muz/rel/dl_sparse_table.h @@ -338,17 +338,20 @@ namespace datalog { SASSERT(length + m_small_offset <= 64); } table_element get(const char * rec) const { - const uint64_t * ptr = reinterpret_cast(rec + m_big_offset); - uint64_t res = *ptr; + + uint64_t res; + memcpy(&res, rec + m_big_offset, sizeof(res)); res >>= m_small_offset; res &= m_mask; return res; } void set(char * rec, table_element val) const { SASSERT( (val&~m_mask)==0 ); //the value fits into the column - uint64_t * ptr = reinterpret_cast(rec + m_big_offset); - *ptr &= m_write_mask; - *ptr |= val << m_small_offset; + uint64_t cell; + memcpy(&cell, rec + m_big_offset, sizeof(cell)); + cell &= m_write_mask; + cell |= val << m_small_offset; + memcpy(rec + m_big_offset, &cell, sizeof(cell)); } unsigned next_ofs() const { return m_offset+m_length; } };