diff --git a/std/container/array.d b/std/container/array.d index 341fa7a14..cf7ee436c 100644 --- a/std/container/array.d +++ b/std/container/array.d @@ -324,7 +324,7 @@ if (!is(Unqual!T == bool)) auto newPayloadPtr = cast(T*) malloc(nbytes); newPayloadPtr || assert(false, "std.container.Array.length failed to allocate memory."); auto newPayload = newPayloadPtr[0 .. newLength]; - memcpy(newPayload.ptr, _payload.ptr, _payload.sizeof); + memcpy(newPayload.ptr, _payload.ptr, startEmplace * T.sizeof); memset(newPayload.ptr + startEmplace, 0, (newLength - startEmplace) * T.sizeof); GC.addRange(newPayload.ptr, nbytes); @@ -1136,11 +1136,19 @@ if (!is(Unqual!T == bool)) @safe unittest { - // REG https://issues.dlang.org/show_bug.cgi?id=13621 + // https://issues.dlang.org/show_bug.cgi?id=13621 import std.container : Array, BinaryHeap; alias Heap = BinaryHeap!(Array!int); } +@system unittest +{ + // https://issues.dlang.org/show_bug.cgi?id=18800 + static struct S { void* p; } + Array!S a; + a.length = 10; +} + @system unittest { Array!int a;