I don't get it. version(unittest) can't seem to use local variable

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jul 12 21:53:43 PDT 2014


On Sat, Jul 12, 2014 at 09:30:44PM -0700, H. S. Teoh via Digitalmars-d-learn wrote:
> On Sat, Jul 12, 2014 at 09:20:06PM -0700, Ali Çehreli via Digitalmars-d-learn wrote:
[...]
> > The twist here is that the OP's function returned 'this' by
> > reference.  Changing that not only not have any effect on the
> > object, it would also be undefined behavior because 'this' is a
> > local variable in that use.
> > 
> > class C {
> >     ref C getPtr() { return this; }
> > }
> > 
> > void main()
> > {
> >     auto c = new C();
> >     assert(c.getPtr() is c);
> > 
> >     c.getPtr() = new C();    // modifying dead variable
> >     assert(c.getPtr() is c); // no effect
> > }
> [...]
> 
> Hmm. Shouldn't this be a compiler bug?? Returning a ref to a local
> variable should be illegal, even implicit ones like 'this'.
[...]

Filed as bug:

	https://issues.dlang.org/show_bug.cgi?id=13116

It's pretty serious, since it causes memory corruption. In fact, it also
breaks @safe-ty (see second bug note in above link).


T

-- 
The early bird gets the worm. Moral: ewww...


More information about the Digitalmars-d-learn mailing list