Likely closure memory corruption

Iain Buclaw ibuclaw at ubuntu.com
Mon Mar 11 07:19:25 PDT 2013


On 11 March 2013 05:46, deadalnix <deadalnix at gmail.com> wrote:

> On Sunday, 10 March 2013 at 21:01:11 UTC, Walter Bright wrote:
>
>> On 3/8/2013 8:25 AM, deadalnix wrote:
>>
>>> 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;
>>> }
>>>
>>
>> 1. We can't do anything with code snippets like that. A complete,
>> compilable example is necessary.
>>
>> 2. Such bug reports, along with the complete example demonstrating it,
>> needs to go into bugzilla, not here.
>>
>
> http://d.puremagic.com/issues/**show_bug.cgi?id=9685<http://d.puremagic.com/issues/show_bug.cgi?id=9685>
>
> Isn't it an already known bug ?
>


Works on gdc. :o)


-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20130311/95a68fff/attachment-0001.html>


More information about the Digitalmars-d mailing list