Bug 14860 – Destructor is not called for block assignment

Status
RESOLVED
Resolution
FIXED
Severity
major
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2015-08-02T02:03:00Z
Last change time
2017-07-22T12:36:16Z
Keywords
pull, wrong-code
Assigned to
nobody
Creator
k.hara.pg

Comments

Comment #0 by k.hara.pg — 2015-08-02T02:03:56Z
It's similar to 14815. From: http://forum.dlang.org/thread/[email protected] uint dtorCount; struct S { uint x; void opAssign(const ref S rhs) { assert(false, "Not called"); } ~this() { ++dtorCount; } } void main() { S[] a; a.length = 1; a[0].x = 42; // Some random non-init value a[] = S.init; assert(a[0].x == 0); // As expected, the value has been reset assert(dtorCount == 0); // Passes?!? }
Comment #1 by k.hara.pg — 2015-08-02T04:35:46Z
Comment #2 by github-bugzilla — 2015-08-02T11:07:55Z
Commits pushed to master at https://github.com/D-Programming-Language/phobos https://github.com/D-Programming-Language/phobos/commit/35f1f6226aa523305e41f3dee68fbb0ce8fafdf4 Supplemental fix for issue 14860 `task[] = RTask.init;` has two bugs: 1. `RTask` is a nested struct, so `RTask.init` contains null context pointer. 2. That is a block assignment, so there is a possibility to call `RTask.~this()` on garbage objects (stack allocated `buf` is initialized by `void`). Fixed to use `emplaceRef` on each elements. https://github.com/D-Programming-Language/phobos/commit/deeab6c867fbed479fe57604a52f25e360f0b410 Merge pull request #3522 from 9rnsr/fix14860 Supplemental fix for issue 14860
Comment #3 by github-bugzilla — 2015-08-02T14:58:52Z
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/fd8af3a98e1deb370aecf940c939f8a7794a850e fix Issue 14860 - Destructor is not called for block assignment https://github.com/D-Programming-Language/dmd/commit/286906ba8ffe9e75905998fd99a6349b7a0f6b4e Merge pull request #4856 from 9rnsr/fix14860 Issue 14860 - Destructor is not called for block assignment
Comment #4 by github-bugzilla — 2015-10-04T18:20:09Z
Comment #5 by github-bugzilla — 2017-07-22T12:36:16Z
Commits pushed to dmd-cxx at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/fd8af3a98e1deb370aecf940c939f8a7794a850e fix Issue 14860 - Destructor is not called for block assignment https://github.com/dlang/dmd/commit/286906ba8ffe9e75905998fd99a6349b7a0f6b4e Merge pull request #4856 from 9rnsr/fix14860