On 10 Mar 2015, at 14:29, [email protected] 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
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to