Likely closure memory corruption

deadalnix deadalnix at gmail.com
Sun Mar 10 12:11:05 PDT 2013


On Friday, 8 March 2013 at 16:25:56 UTC, deadalnix wrote:
> Sooooooo,
>
> I have a struct. The struct have a context pointer. I have this 
> method :
>
> @property
> auto save() inout {
> 	return inout(Lexer)(t, r.save, line, index);
> }
>
> The context pointer IS NOT COPIED.
>
> Fixed it that way :
>
> @property
> auto save() inout {
> 	// XXX: dmd bug, context pointer isn't copied properly
> 	// doing it manualy using black magic.
> 	// Context pointer is the last element of the struct. Here in 
> position 9.
> 	auto ret = inout(Lexer)(t, r.save, line, index);
> 	(cast(void**) &ret)[9] = (cast(void**) &this)[9];
> 	
> 	return ret;
> }
>
> Very scary that I have to do that kind of things.

Is this a know bug ? Come on, this is a really bad bug, not the 
type of thing that can be ignored !


More information about the Digitalmars-d mailing list