August 06, 2021 [Issue 22185] New: std.array.array() doesn't handle throwing element copying | ||||
|---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=22185 Issue ID: 22185 Summary: std.array.array() doesn't handle throwing element copying Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: phobos Assignee: nobody@puremagic.com Reporter: kinke@gmx.net If the source range has a length, it allocates an uninitialized array and fills it with copies. If a copy throws (throwing postblit/copy constructor), that element and the following ones are in no well-defined state, and if the element type has a destructor, the GC will eventually try to destruct garbage elements. Relevant code: https://github.com/dlang/phobos/blob/ccecbda25f1114bca2782c971e7d47cf65abd825/std/array.d#L126-L134 It should probably use new `core.lifetime.copyEmplace()` too. Analogous to druntime issue https://issues.dlang.org/show_bug.cgi?id=21983. -- | ||||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply