# New Ticket Created by Will Coleda # Please include the string: [perl #56786] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=56786 >
Using tcl, I can make parrot segfault in this branch. $ ../../parrot tcl.pbc -e "error eek" Segmentation fault Real tclsh, if you put that in a file and ran it, would say: eek while executing "error eek" (file "foo.tcl" line 1) The backtrace is: #0 0xb7b75357 in string_append (interp=0x804f040, a=0x2, b=0x81fa8e4) at src/string.c:516 #1 0xb7b9a69b in Parrot_concat_s_sc (cur_opcode=0xb7a887f4, interp=0x804f040) at src/ops/string.ops:112 #2 0xb7c1c3e4 in runops_slow_core (interp=0x804f040, pc=0xb7a887f4) at src/runops_cores.c:221 #3 0xb7bee9d6 in runops_int (interp=0x804f040, offset=3) at src/interpreter.c:929 #4 0xb7bef2b3 in runops (interp=0x804f040, offs=3) at src/inter_run.c:101 #5 0xb7bef550 in runops_args (interp=0x804f040, sub=0x82233a8, obj=0x809dac0, meth_unused=0x0, sig=0xb7e4e20f "vP", ap=0xbff5ce7c "è1\"\b¸Îõ¿Pìï·\220Q\034\bè1\"\b¨3\"[EMAIL PROTECTED]") at src/inter_run.c:223 #6 0xb7bef68c in Parrot_runops_fromc_args (interp=0x804f040, sub=0x82233a8, sig=0xb7e4e20f "vP") at src/inter_run.c:295 #7 0xb7bd8b37 in Parrot_runcode (interp=0x804f040, argc=3, argv=0xbff5cfe8) at src/embed.c:944 #8 0xb7e2a812 in imcc_run_pbc (interp=0x804f040, obj_file=0, output_file=0x0, argc=3, argv=0xbff5cfe8) at compilers/imcc/main.c:783 #9 0xb7e2b202 in imcc_run (interp=0x804f040, sourcefile=0xbff5d9b0 "tcl.pbc", argc=3, argv=0xbff5cfe8) at compilers/imcc/main.c:1071 #10 0x08048988 in main (argc=3, argv=0xbff5cfe8) at src/main.c:61 This may be related to the intermediate test file I began with: catch after result if {$result != {wrong # args: should be "after option ?arg arg ...?"}} { puts -nonewline "not " } puts "ok" The first line eval's the command "after", and stores the error message in "result" ([after] requires arguments). In tclsh, this prints "ok". Partcl in this branch prints "not ok", and the result is the empty string. This exception handler is in runtime/builtin/catch.pir, beginning at line 81. If I comment out the push_eh/pop_eh pair there, I get another segfault from the same bit of C code, although the path to get there is different. #0 0xb7b7a357 in string_append (interp=0x804f040, a=0x2, b=0x81fa8e4) at src/string.c:516 #1 0xb7b9f69b in Parrot_concat_s_sc (cur_opcode=0xb7a8d7f4, interp=0x804f040) at src/ops/string.ops:112 #2 0xb7c213e4 in runops_slow_core (interp=0x804f040, pc=0xb7a8d7f4) at src/runops_cores.c:221 #3 0xb7bf39d6 in runops_int (interp=0x804f040, offset=3253) at src/interpreter.c:929 #4 0xb7bf42b3 in runops (interp=0x804f040, offs=3253) at src/inter_run.c:101 #5 0xb7bf4550 in runops_args (interp=0x804f040, sub=0x843fde8, obj=0x809dac0, meth_unused=0x0, sig=0xb7e53530 "vPS", ap=0xbfd2010c "\füC\bÐÃG¶°G\bH\001Ò¿Hÿ½·èýC\bÐÃG¶") at src/inter_run.c:223 #6 0xb7bf468c in Parrot_runops_fromc_args (interp=0x804f040, sub=0x843fde8, sig=0xb7e53530 "vPS") at src/inter_run.c:295 #7 0xb7be052a in Parrot_ex_throw_from_c (interp=0x804f040, exception=0x843fc0c) at src/exceptions.c:302 #8 0xb7be05fe in Parrot_ex_throw_from_c_args (interp=0x804f040, ret_addr=0x0, exitcode=20, format=0xb7e5689c "Class %Ss already registered!\n") at src/exceptions.c:349 #9 0xb7c14ac1 in fail_if_type_exists (interp=0x804f040, name=0x843fd5c) at src/oo.c:632 #10 0xb7c14b34 in Parrot_oo_register_type (interp=0x804f040, name=0x843fd5c) at src/oo.c:662 <SNIP> -- Will "Coke" Coleda