diff --git a/src/libAtomVM/term.h b/src/libAtomVM/term.h index 116411b3e..393a91fd4 100644 --- a/src/libAtomVM/term.h +++ b/src/libAtomVM/term.h @@ -2396,16 +2396,18 @@ static inline term term_from_float(avm_float_t f, Heap *heap) term *boxed_value = memory_heap_alloc(heap, FLOAT_SIZE); boxed_value[0] = ((FLOAT_SIZE - 1) << 6) | TERM_BOXED_FLOAT; - float_term_t *boxed_float = (float_term_t *) (boxed_value + 1); - boxed_float->f = f; - + // For wasm32, alignof(avm_float_t) = 8 and alignof(term) = 4 + // `memory_heap_alloc` returns memory aligned to term size. + memcpy(boxed_value + 1, &f, sizeof(avm_float_t)); return ((term) boxed_value) | TERM_PRIMARY_BOXED; } static inline avm_float_t term_to_float(term t) { - const float_term_t *boxed_float = (float_term_t *) (term_to_const_term_ptr(t) + 1); - return boxed_float->f; + avm_float_t result; + // see `term_from_float` + memcpy(&result, term_to_const_term_ptr(t) + 1, sizeof(avm_float_t)); + return result; } static inline bool term_is_number(term t)