aboutsummaryrefslogtreecommitdiff
path: root/src/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdlib')
-rw-r--r--src/stdlib/optionals.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/stdlib/optionals.c b/src/stdlib/optionals.c
index 7df9a827..3c595893 100644
--- a/src/stdlib/optionals.c
+++ b/src/stdlib/optionals.c
@@ -14,7 +14,10 @@ public PUREFUNC bool is_none(const void *obj, const TypeInfo_t *non_optional_typ
if (non_optional_type->metamethods.is_none)
return non_optional_type->metamethods.is_none(obj, non_optional_type);
- return *(bool*)(obj + non_optional_type->size);
+ const void *dest = (obj + non_optional_type->size);
+ if (non_optional_type->align > 0 && (int64_t)dest % non_optional_type->align)
+ dest += (non_optional_type->align - ((int64_t)dest % non_optional_type->align));
+ return *(bool*)dest;
}
PUREFUNC public uint64_t Optional$hash(const void *obj, const TypeInfo_t *type)