[Issue 11888] Incorrect behaviour taking slice from return value

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Jan 10 04:40:35 PST 2014


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



--- Comment #4 from Manu <turkeyman at gmail.com> 2014-01-10 04:40:32 PST ---
(In reply to comment #2)
> (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.

If it's not to be fixed, it must at least be an error. This sort of undefined
and unexpected behaviour isn't really acceptable.

-- 
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