On Tue., 29 Jan. 2019, 10:25 pm Walter Bright via Digitalmars-d-announce <digitalmars-d-announce@puremagic.com wrote:
On 1/29/2019 3:45 AM, Andrei Alexandrescu wrote:
> I am talking about this:
>
> int[] a = cast(int[]) alloc.allocate(100 * int.sizeof);
> if (alloc.reallocate(a, 200 * int.sizeof)
> {
>      assert(a.length == 200);
> }

Even simpler:

   void func(ref void* p) {
     free(p);                     // frees (1)
     p = malloc(100);              // (2)
   }

   int* p = cast(int*)malloc(16);  // (1)
   func(p);                        // p copied to temp for conversion to void*
   free(p);                        // frees (1) again
                                   // (2) is left dangling

It's a memory corruption issue, with no way to detect it.

Why are you so stuck on this case? The DIP is about accepting rvalues, not lvalues...
Calling with 'p', an lvalue, is not subject to this DIP.