Bug 23563 – Array length extension ignores copy constructor

Status
NEW
Severity
normal
Priority
P3
Component
druntime
Product
D
Version
D2
Platform
All
OS
All
Creation time
2022-12-16T17:33:09Z
Last change time
2024-12-07T13:42:20Z
Assigned to
No Owner
Creator
Paul Backus
See also
https://issues.dlang.org/show_bug.cgi?id=23557, https://issues.dlang.org/show_bug.cgi?id=23556, https://issues.dlang.org/show_bug.cgi?id=20879, https://issues.dlang.org/show_bug.cgi?id=24432
Moved to GitHub: dmd#17202 →

Comments

Comment #0 by snarwin+bugzilla — 2022-12-16T17:33:09Z
As of DMD 2.101.0, the following program compiles and runs successfully to completion: --- struct S { this(ref S) { assert(0); } } void main() { S[] a = [ S() ]; auto p = a.ptr; // extend until reallocation while (a.ptr == p) a.length = a.length + 1; // no assert } --- This program should assert at runtime when the array is reallocated, but does not, because the copy constructors of the array's elements are not called. If the copy constructor is changed to a postblit (`this(this)`), the program asserts at runtime, as expected. See also issues 23557, 23556, and 20879, which cover array reallocations triggered by other means.
Comment #1 by robert.schadek — 2024-12-07T13:42:20Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17202 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB