From a418dfdc658a2cc9cc1d1b4a95f1167be6054bbb Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 16 Aug 2025 14:58:37 -0400 Subject: Bugfix for optionals that have alignment issues --- src/stdlib/optionals.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/stdlib') 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) -- cgit v1.2.3