[Issue 24433] New: Array value assignment is incorrect for structs with destructors and copy constructors
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Mar 8 16:11:32 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=24433
Issue ID: 24433
Summary: Array value assignment is incorrect for structs with
destructors and copy constructors
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: major
Priority: P1
Component: druntime
Assignee: nobody at puremagic.com
Reporter: artha at samerion.com
If a struct defines both (1) a destructor and (2) a postblit or copy
constructor, assigning it as a value to a slice will produce an invalid result:
```
import std.stdio;
struct Uncopiable {
int value;
~this() {
}
@disable this(const ref Uncopiable);
}
void testCopy(Uncopiable unc) {}
void main() {
auto a = Uncopiable(1);
auto b = Uncopiable(2);
//testCopy(a); // fails, alright
auto c = [Uncopiable(3)];
c[] = a;
writeln(c[0].value); // Prints 3 instead of 1
writeln(a.value); // Prints 3 instead of 1
}
```
Removing either the destructor or copy constructor fixes the above problem. The
issue also occurs if the copy constructor is replaced with a postblit.
The bug appears to have been introduced in #14382
https://github.com/dlang/dmd/commit/d0a367e98cc31a2675a5fc41a150dd38089f1982#diff-c9a721f453e1e17d997f8603ca3e4e65c765f0ebf0dd1cfb972ddddc959bdbb1
--
More information about the Digitalmars-d-bugs
mailing list