From: SourceForge.net <no...@so...> - 2010-08-18 16:33:49
|
Bugs item #3046594, was opened at 2010-08-16 22:16 Message generated for change (Comment added) made by ferrieux You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=3046594&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 60. NRE and coroutines Group: development: 8.6b1.1 Status: Pending Resolution: Fixed Priority: 7 Private: No Submitted By: Don Porter (dgp) Assigned to: Don Porter (dgp) Summary: tailcall/try inconsistency compiled/direct Initial Comment: % proc foo {} {try {tailcall concat} finally {}} % foo tailcall called from within a catch environment % proc bar {} {set try try; $try {tailcall concat} finally {}} % bar ---------------------------------------------------------------------- >Comment By: Alexandre Ferrieux (ferrieux) Date: 2010-08-18 18:33 Message: I think so :) ---------------------------------------------------------------------- Comment By: miguel sofer (msofer) Date: 2010-08-18 17:55 Message: Inconsistency fixed in HEAD. Leaving open with a question: should the error message change to "tailcall called from within a catch or try environment"? ---------------------------------------------------------------------- Comment By: miguel sofer (msofer) Date: 2010-08-17 22:14 Message: Discussion of the second example moved over to #3047235 ---------------------------------------------------------------------- Comment By: miguel sofer (msofer) Date: 2010-08-17 21:35 Message: These two are related but not identical. 1. non-bc'ed catching of tailcalls is there, but it is broken (hence the segfault) 2. bc'ed try uses the catch mechanism, hence does not permit tailcalling out of the try body 3. non-bc'ed try is not aware of tailcalls ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2010-08-17 18:58 Message: Worse related example: % proc foo {} {set catch catch; $catch {tailcall concat}} % foo Program received signal SIGSEGV, Segmentation fault. 0x00000001 in ?? () (gdb) bt #0 0x00000001 in ?? () #1 0x080e2414 in TclNRRunCallbacks (interp=0x81c2eb0, result=0, rootPtr=0x821cfb0, tebcCall=1) at /home/dgp/cvs/tcl-only/generic/tclBasic.c:4324 #2 0x0816ee9b in TclExecuteByteCode (interp=0x81c2eb0, codePtr=0x824c220) at /home/dgp/cvs/tcl-only/generic/tclExecute.c:6596 #3 0x080e26f9 in NRCallTEBC (data=0x823dd8c, interp=0x81c2eb0, result=0) at /home/dgp/cvs/tcl-only/generic/tclBasic.c:4400 #4 0x080e2414 in TclNRRunCallbacks (interp=0x81c2eb0, result=0, rootPtr=0x0, tebcCall=0) at /home/dgp/cvs/tcl-only/generic/tclBasic.c:4324 #5 0x080e4b64 in TclEvalObjEx (interp=0x81c2eb0, objPtr=0x8246844, flags=131072, invoker=0x0, word=0) at /home/dgp/cvs/tcl-only/generic/tclBasic.c:5941 #6 0x080e4aeb in Tcl_EvalObjEx (interp=0x81c2eb0, objPtr=0x8246844, flags=131072) at /home/dgp/cvs/tcl-only/generic/tclBasic.c:5922 #7 0x0817cfc3 in Tcl_RecordAndEvalObj (interp=0x81c2eb0, cmdPtr=0x820ef80, flags=131072) at /home/dgp/cvs/tcl-only/generic/tclHistory.c:192 #8 0x080730e1 in Tcl_Main (argc=-1, argv=0xbfffe0f8, appInitProc=0x80545bb <Tcl_AppInit>) at /home/dgp/cvs/tcl-only/generic/tclMain.c:471 #9 0x080545ac in main (argc=Cannot access memory at address 0x1a ) at /home/dgp/cvs/tcl-only/unix/tclAppInit.c:85 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=3046594&group_id=10894 |