On Tuesday, 30 September 2014 at 14:01:17 UTC, Steven Schveighoffer wrote:
Assertion passes with D1/Tango runtime but fails with current D2 runtime. This happens because `result.ptr` is not actually a pointer returned by gc_qalloc from array reallocation, but interior pointer 16 bytes from the start of that block. Druntime stores some metadata
(length/capacity I presume) in the very beginning.

This is accurate, it stores the "used" size of the array. But it's only the case for arrays, not general GC.malloc blocks.

Alternative is to use result.capacity, which essentially looks up the same thing (and should be more accurate). But it doesn't cover the same inputs.

Why is it stored in the beginning and not in the end of the block (like capacity)? I'd like to explore options of removing interior pointer completely before proceeding with adding more special cases to GC functions.

Reply via email to