1.0.44.33: ir2tran: Correctly set up d-x closure values for tail-local-calls.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 27 Nov 2010 03:01:34 +0000 (03:01 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 27 Nov 2010 03:01:34 +0000 (03:01 +0000)
commit818b7d2a5f74a4fd379b269c345f8301fbeb1b36
treeb95826af2b9bbf7a185b9ff10aff681f45ea6bb0
parentc4776b3b3121be1c3bad293a4fa7efffb592f7f7
1.0.44.33: ir2tran: Correctly set up d-x closure values for tail-local-calls.

  * Tail-local-call re-uses the current frame.  It therefore needs to
use the old-fp value from the current frame in EMIT-PSETQ-MOVES.

  * "implicit" value cells need to use the /current/ frame pointer in
EMIT-PSETQ-MOVES to correctly initialize the closure.

  * Therefore: Add a new &optional argument to EMIT-PSETQ-MOVES for
the frame-pointer to be used in closure initialization.

  * This fixes the obvious part of lp#681092, but unless there is a
guarantee that the stack slots used for the "implicit" value cells
remain unused in the tail-called function then all this does is drive
the bug to become more subtle.
src/compiler/ir2tran.lisp
version.lisp-expr