[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