mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Change union tag size to account for #align.
The prior behavior was adjusting the tag size based on the alignment of the types in the union, even when the union has a custom alignment specified with `#align`. This changes the behavior so that a custom alignment, if specified, takes precedence over the alignment of the types.
This commit is contained in:
+9
-5
@@ -3059,11 +3059,15 @@ gb_internal i64 union_tag_size(Type *u) {
|
|||||||
compiler_error("how many variants do you have?! %lld", cast(long long)u->Union.variants.count);
|
compiler_error("how many variants do you have?! %lld", cast(long long)u->Union.variants.count);
|
||||||
}
|
}
|
||||||
|
|
||||||
for_array(i, u->Union.variants) {
|
if (u->Union.custom_align > 0) {
|
||||||
Type *variant_type = u->Union.variants[i];
|
max_align = gb_max(max_align, u->Union.custom_align);
|
||||||
i64 align = type_align_of(variant_type);
|
} else {
|
||||||
if (max_align < align) {
|
for_array(i, u->Union.variants) {
|
||||||
max_align = align;
|
Type *variant_type = u->Union.variants[i];
|
||||||
|
i64 align = type_align_of(variant_type);
|
||||||
|
if (max_align < align) {
|
||||||
|
max_align = align;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user