[Issue 11888] Incorrect behaviour taking slice from return value

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jan 9 23:12:51 PST 2014


https://d.puremagic.com/issues/show_bug.cgi?id=11888


monarchdodra at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra at gmail.com


--- Comment #2 from monarchdodra at gmail.com 2014-01-09 23:12:49 PST ---
(In reply to comment #0)
> So given a C-style function like this, that returns a pointer and length via
> pointer argument:
>    ubyte* test(size_t* len)
>    {
>      *len = 100;
>      return cast(ubyte*)1234;
>    }
> 
> Call it, but immediately use the size argument to slice a range:
>    size_t size;
>    ubyte[] t = test(&size)[0..size];
> 
> t is null.
> 
> If I break it into separate statements, it works:
>    size_t size;
>    ubyte* pt = test(&size);
>    ubyte[] t = pt[0..size];
> 
> t.ptr = 1234, t.length = 100;

Isn't this an issue mutating and using a parameter in a same "function"?

I don't know how the compiler rewrites slicing a pointer, but if you interpret
it as a "3-argument function, you get":

slice(ptr, low, high);
eg:
slice(test(&size), 0, size);

Here, "size" is read as parameter 3, but also mutated as parameter 1.

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list