mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-08 16:48:18 +00:00
Merge pull request #5211 from Barinzaya/union-custom-align-tag-size
Consider custom `#align` when determining union tag size
This commit is contained in:
@@ -3093,6 +3093,9 @@ gb_internal i64 union_tag_size(Type *u) {
|
||||
compiler_error("how many variants do you have?! %lld", cast(long long)u->Union.variants.count);
|
||||
}
|
||||
|
||||
if (u->Union.custom_align > 0) {
|
||||
max_align = gb_max(max_align, u->Union.custom_align);
|
||||
} else {
|
||||
for_array(i, u->Union.variants) {
|
||||
Type *variant_type = u->Union.variants[i];
|
||||
i64 align = type_align_of(variant_type);
|
||||
@@ -3100,6 +3103,7 @@ gb_internal i64 union_tag_size(Type *u) {
|
||||
max_align = align;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u->Union.tag_size = cast(i16)gb_min3(max_align, build_context.max_align, 8);
|
||||
return u->Union.tag_size;
|
||||
|
||||
Reference in New Issue
Block a user