aboutsummaryrefslogtreecommitdiff
path: root/src/stdlib
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-08-16 14:58:37 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-08-16 14:58:37 -0400
commita418dfdc658a2cc9cc1d1b4a95f1167be6054bbb (patch)
tree06b27a513ad43632383b919ba009edd52606669f /src/stdlib
parentb2af4bc802e13202a5973a214efab77a451188a8 (diff)
Bugfix for optionals that have alignment issues
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)