diff --git a/core/mem/mem.odin b/core/mem/mem.odin index 815ef9abf..74e4d5d96 100644 --- a/core/mem/mem.odin +++ b/core/mem/mem.odin @@ -289,8 +289,8 @@ calc_padding_with_header :: proc(ptr: uintptr, align: uintptr, header_size: int) -clone_slice :: proc(slice: $T/[]$E, allocator := context.allocator, loc := #caller_location) -> T { - new_slice := make(T, len(slice), allocator, loc); +clone_slice :: proc(slice: $T/[]$E, allocator := context.allocator, loc := #caller_location) -> (new_slice: T) { + new_slice, _ = make(T, len(slice), allocator, loc); runtime.copy(new_slice, slice); return new_slice; } diff --git a/core/runtime/core_builtin.odin b/core/runtime/core_builtin.odin index 1cac23cf3..9a90800c4 100644 --- a/core/runtime/core_builtin.odin +++ b/core/runtime/core_builtin.odin @@ -180,8 +180,8 @@ new_aligned :: proc($T: typeid, alignment: int, allocator := context.allocator, @builtin new_clone :: proc(data: $T, allocator := context.allocator, loc := #caller_location) -> (t: ^T, err: Allocator_Error) #optional_second { - data := alloc_bytes(size_of(T), alignment, allocator, loc) or_return; - t = (^T)(raw_data(data)); + t_data := mem_alloc_bytes(size_of(T), align_of(T), allocator, loc) or_return; + t = (^T)(raw_data(t_data)); if t != nil { t^ = data; }