diff --git a/base/runtime/core_builtin_soa.odin b/base/runtime/core_builtin_soa.odin index 48c48f305..390497ec7 100644 --- a/base/runtime/core_builtin_soa.odin +++ b/base/runtime/core_builtin_soa.odin @@ -480,10 +480,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 {