Bug 6187 – compiler could use move semantics for appending temporaries to an array

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
Linux
Creation time
2011-06-21T04:52:00Z
Last change time
2015-12-10T14:46:19Z
Assigned to
nobody
Creator
schveiguy

Comments

Comment #0 by schveiguy — 2011-06-21T04:52:58Z
Currently, the following code: import std.stdio; struct S { int x; this(this) { writeln("postblit"); } ~this() { writeln("dtor"); } } void main() { S[] arr; arr ~= S(); } outputs: postblit dtor But it could have move semantics. However, the runtime function which appends data does not know whether the given data to append is an rvalue or not. For example, the following cannot have move semantics: S s; s.x = 1; arr ~= s; writeln(s.x); So the compiler must give an additional flag (or call a separate runtime function) when appending an rvalue. When the compiler does this, flip the bug to a druntime bug and assign it to me, and I'll fix the runtime.
Comment #1 by lt.infiltrator — 2015-12-09T12:07:42Z
Can I assume that this has been fixed? 2.069 outputs only the "dtor" and no postblit.
Comment #2 by schveiguy — 2015-12-10T14:46:19Z
I think this can be closed. The temporary is no longer destructed. The dtor is called actually by the GC. I tested as far back as 2.067.1