id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc,lang,patch,platform
66,"partcl's ""expr-old.test"" spec test file exposes segfault (r34059)",coke,,"The full version gives a bus error. With a stripped down version inline below, I get a segfault (switches to a bus error if you use -G) that ends with the stack trace below. I think it's related to the mod opcode (which shows up in the stack trace); it consistently presents a problem when invoking the tcl: {expr 2%0} (but without all the extra code, it properly complains about modulus 0.)

See http://code.google.com/p/partcl/wiki/PartclSource for instructions on getting a copy of partcl to duplicate the issue with. if you save the file below as ""foo.tcl"", you can get the segfault with ""../../parrot tcl.pbc foo.tcl"" (after building partcl).

{{{
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x5954495e
0x010911cf in clone_key_arg (interp=0x2506bc0, st=0xbfffa21c) at src/inter_call.c:972
972         if (key->vtable->base_type != enum_class_Key)
(gdb) bt
#0  0x010911cf in clone_key_arg (interp=0x2506bc0, st=0xbfffa21c) at src/inter_call.c:972
#1  0x01092276 in Parrot_convert_arg (interp=0x2506bc0, st=0xbfffa21c) at src/inter_call.c:1585
#2  0x01091e02 in Parrot_process_args (interp=0x2506bc0, st=0xbfffa21c, param_or_result=PARROT_PASS_PARAMS) at src/inter_call.c:1457
#3  0x010923f2 in parrot_pass_args (interp=0x2506bc0, src_ctx=0x3a35980, dest_ctx=0x6592c60, src_indexes=0x2410514, dest_indexes=0x2422e64, param_or_result=PARROT_PASS_PARAMS) at src/inter_call.c:1651
#4  0x0100f5d0 in Parrot_get_params_pc (cur_opcode=0x2422e64, interp=0x2506bc0) at src/ops/core.ops:601
#5  0x010d8926 in runops_slow_core (interp=0x2506bc0, pc=0x2422e64) at src/runops_cores.c:222
#6  0x01096f3e in runops_int (interp=0x2506bc0, offset=5346) at src/interpreter.c:938
#7  0x010978d3 in runops (interp=0x2506bc0, offs=5346) at src/inter_run.c:103
#8  0x01097ba3 in runops_args (interp=0x2506bc0, sub=0x43edde0, obj=0x283c178, meth_unused=0x0, sig=0x12f9a54 ""vP"", ap=0xbfffa45c ""xK8\004ÀkP\002\002"") at src/inter_run.c:240
#9  0x01097cd8 in Parrot_runops_fromc_args (interp=0x2506bc0, sub=0x43edde0, sig=0x12f9a54 ""vP"") at src/inter_run.c:305
#10 0x0107fc64 in Parrot_ex_throw_from_c (interp=0x2506bc0, exception=0x4384b78) at src/exceptions.c:327
#11 0x0107fd11 in Parrot_ex_throw_from_c_args (interp=0x2506bc0, ret_addr=0x0, exitcode=30, format=0x132efe0 ""int modulus by zero"") at src/exceptions.c:394
#12 0x011c4616 in Parrot_Integer_multi_modulus_DEFAULT_PMC (interp=0x2506bc0, pmc=0x4387214, value=0x4385aac, dest=0x4384e50) at ./src/pmc/integer.pmc:961
#13 0x010a26bd in pcf_P_JPPP (interp=0x2506bc0, self=0x2845870) at src/nci.c:629
#14 0x011b844f in Parrot_NCI_invoke (interp=0x2506bc0, pmc=0x2845870, next=0x0) at ./src/pmc/nci.pmc:321
#15 0x0109421c in Parrot_pcc_invoke_sub_from_sig_object (interp=0x2506bc0, sub_obj=0x2845870, sig_obj=0x4384e18) at src/inter_call.c:2659
#16 0x0109e4a4 in Parrot_mmd_multi_dispatch_from_c_args (interp=0x2506bc0, name=0x12fab28 ""modulus"", sig=0x1307e9c ""PPP->P"") at src/multidispatch.c:496
#17 0x01175f74 in Parrot_default_modulus (interp=0x2506bc0, pmc=0x4387214, value=0x4385aac, dest=0x4384e50) at ./src/pmc/default.pmc:1656
#18 0x01025b30 in Parrot_mod_p_p_p (cur_opcode=0x243adb4, interp=0x2506bc0) at src/ops/math.ops:799
#19 0x010d8926 in runops_slow_core (interp=0x2506bc0, pc=0x243adb4) at src/runops_cores.c:222
#20 0x01096f3e in runops_int (interp=0x2506bc0, offset=3301) at src/interpreter.c:938
#21 0x010978d3 in runops (interp=0x2506bc0, offs=3301) at src/inter_run.c:103
#22 0x01097ba3 in runops_args (interp=0x2506bc0, sub=0x6247454, obj=0x283c178, meth_unused=0x0, sig=0x12f9a54 ""vP"", ap=0xbfffc8cc ""~Hn$\006ÀkP\002\002"") at src/inter_run.c:240
#23 0x01097cd8 in Parrot_runops_fromc_args (interp=0x2506bc0, sub=0x6247454, sig=0x12f9a54 ""vP"") at src/inter_run.c:305
#24 0x0107fc64 in Parrot_ex_throw_from_c (interp=0x2506bc0, exception=0x6246e88) at src/exceptions.c:327
#25 0x0107fd11 in Parrot_ex_throw_from_c_args (interp=0x2506bc0, ret_addr=0x0, exitcode=20, format=0x130c0cc ""Class %Ss already registered!\n"") at src/exceptions.c:394
#26 0x010cc488 in fail_if_type_exists (interp=0x2506bc0, name=0x6246ec0) at src/oo.c:533
...
}}}

And here's the tcl code:

{{{
if {[lsearch [namespace children] ::tcltest] == -1} {
    package require tcltest 2.1
    namespace import -force ::tcltest::*
}


proc testIEEE {} {
    variable ieeeValues
    binary scan [binary format dd -1.0 1.0] c* c
    switch -exact -- $c {
        {0 0 0 0 0 0 -16 -65 0 0 0 0 0 0 -16 63} {
            # little endian
            binary scan \x00\x00\x00\x00\x00\x00\xf0\xff d \
                ieeeValues(-Infinity)
            binary scan \x00\x00\x00\x00\x00\x00\xf0\xbf d \
                ieeeValues(-Normal)
            binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d \
                ieeeValues(-Subnormal)
            binary scan \x00\x00\x00\x00\x00\x00\x00\x80 d \
                ieeeValues(-0)
            binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(+0)
            binary scan \x00\x00\x00\x00\x00\x00\x08\x00 d \
                ieeeValues(+Subnormal)
            binary scan \x00\x00\x00\x00\x00\x00\xf0\x3f d \
                ieeeValues(+Normal)
            binary scan \x00\x00\x00\x00\x00\x00\xf0\x7f d \
                ieeeValues(+Infinity)
            binary scan \x00\x00\x00\x00\x00\x00\xf8\x7f d \
                ieeeValues(NaN)
            set ieeeValues(littleEndian) 1
            return 1
        }
        {-65 -16 0 0 0 0 0 0 63 -16 0 0 0 0 0 0} {
            binary scan \xff\xf0\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(-Infinity)
            binary scan \xbf\xf0\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(-Normal)
            binary scan \x80\x08\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(-Subnormal)
            binary scan \x80\x00\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(-0)
            binary scan \x00\x00\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(+0)
            binary scan \x00\x08\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(+Subnormal)
            binary scan \x3f\xf0\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(+Normal)
            binary scan \x7f\xf0\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(+Infinity)
            binary scan \x7f\xf8\x00\x00\x00\x00\x00\x00 d \
                ieeeValues(NaN)
            set ieeeValues(littleEndian) 0
            return 1
        }
        default {
            return 0
        }
    }
}

testConstraint ieeeFloatingPoint [testIEEE]
catch {expr 2%0} msg
}}}",bug,closed,major,,none,,fatal,invalid,tcl blocker,,,,
