https://issues.dlang.org/show_bug.cgi?id=22554

          Issue ID: 22554
           Summary: moveEmplace should wipe any source that contains
                    pointers
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: druntime
          Assignee: [email protected]
          Reporter: [email protected]

Currently, moveEmplace only wipes sources that contain structs with destructors
and copy ctors. Basically, its current design assumes programs that use GC and
not manual allocations. Seeing as move/moveEmplace are mechanisms to pass
ownership at runtime, they really should do a better job on that and wipe any
sources that contain pointers (with the exception of context pointers of nested
structs). In other words, this:

auto ptr1 = &thing;
auto ptr2 = move(ptr1);
assert(!ptr1); // would fail with current implementation of moveEmplace

Of course, this should extend to all pointers in disguise (static arrays of
void, reference types, slices, delegates, and certainly unions).

--

Reply via email to