[fpc-devel] Closures -- debug warning @ ttgobj.FreeTemp
Jonas Maebe
jonas.maebe at elis.ugent.be
Tue Mar 10 14:40:12 CET 2015
On 10 Mar 2015, at 14:29, Blaise at blaise.ru wrote:
> On 10.03.2015 15:47, Jonas Maebe wrote:
>
>> Do you already have an svn account?
>
> The one I had back in 2012.
> My old branch is here: http://svn.freepascal.org/svn/fpc/branches/blaise/closures
You should still have access to everything under http://svn.freepascal.org/svn/fpc/branches/blaise
>> It indicates a problem in the compiler.
>
> Thanks.
> Shall I file it in the bug tracker, then?
Can't hurt.
>> As the message indicates, it means that you (or someone else before
>> you) are trying to free a temp (allocated via tg.gettemp or the
>> like) twice.
>
> I am slightly confused by your choice of the pronoun, so allow me to
> reiterate: the issue exists in the "stock" compiler, even without my
> patches applied.
Then it will be "someone else before you".
>> The generated code will still be ok in this case, but it could lead
>> to trouble in case a temp would be allocated again in between which
>> would happen to get the same address as the old one, since then the
>> second free of the old temp will free the new temp.
>
> I am not at all familiar with this part of the compiler, so devising
> a test case, that would result in invalid codegen, would be
> difficult for me.
> Based on your explanation, it seems it would be something like
> Foo().Bar( YieldAnotherTemp() )
> assuming that YieldAnotherTemp() is called after Foo()?
It depends on when exactly the second free of the initial temp occurs.
A testcase that results in invalid code is not necessary, however. It
should be easily debuggable without that (although fixing it may be
more tricky).
Jonas
More information about the fpc-devel
mailing list