Merge pull request #7497 from Kelimion/fix-#7488

Fix #7488
This commit is contained in:
Jeroen van Rijn
2026-09-01 14:04:17 -07:00
committed by GitHub

View File

@@ -437,6 +437,12 @@ _append_soa_elem :: proc(#no_alias array: ^$T/#soa[dynamic]$E, zero_memory: bool
err = _reserve_soa(array, cap, zero_memory, loc) // do not 'or_return' here as it could be a partial success
}
if size_of(E) == 0 {
footer := raw_soa_footer(array)
footer.len += 1
return 1, nil
}
if size_of(E) > 0 && cap(array)-len(array) > 0 {
footer := raw_soa_footer(array)
// Field stores are generated by the compiler's #soa
@@ -480,10 +486,14 @@ _append_soa_elems :: proc(#no_alias array: ^$T/#soa[dynamic]$E, zero_memory: boo
footer := raw_soa_footer(array)
if size_of(E) > 0 && arg_len > 0 {
offset := footer.len
FIELD_COUNT :: len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E)
// Advance len before the copy, soa_copy_from_slice needs the final len to be set
when FIELD_COUNT != 0 {
offset := footer.len
}
footer.len += arg_len
when FIELD_COUNT == 0 {
// do nothing
} else when FIELD_COUNT <= 16 && ODIN_OPTIMIZATION_MODE <= .Size {