id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc	lang	patch	platform
321	Segfault overriding init sub in PIR	Infinoid	whiteknight	"Got a bug report in #parrot tonight from ron, who provided the following test script:

{{{
.sub main :main
    .local pmc integer_cl, three_cl, three_obj, i

    get_class integer_cl, 'Integer'
    subclass three_cl, integer_cl, 'Three'

    three_obj = new 'Three'
    three_obj = 3

    i = new 'Integer'
    i = 2

    $P0 = sub three_obj, i
    say 'talking about subtraction result:'
    say $P0
.end

.namespace ['Three']

.sub init :method :vtable
    say 'in init'
.end
}}}

This results in a segfault.  I think he was testing on cygwin with 0.9.0, but I was able to reproduce on linux/x86-64 with trunk r36608:

{{{
in init
in init
[New Thread 0x7fc7ff4ac700 (LWP 28160)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fc7ff4ac700 (LWP 28160)]
0x00007fc7fec961b5 in Parrot_init_arg_op (interp=0x1e04080, ctx=0x1f63ee0,
    pc=0x7fff074e89c8, sti=0x7fff074e8848) at src/call/pcc.c:608
608             sig_pmc = ctx->constants[*pc]->u.key;
(gdb) bt
#0  0x00007fc7fec961b5 in Parrot_init_arg_op (interp=0x1e04080, ctx=0x1f63ee0,
    pc=0x7fff074e89c8, sti=0x7fff074e8848) at src/call/pcc.c:608
#1  0x00007fc7fec9b765 in Parrot_init_ret_nci (interp=0x1e04080,
    st=0x7fff074e87f0, sig=0x7fc7fef26434 ""P"") at src/call/pcc.c:529
#2  0x00007fc7fecb5fb8 in set_nci_P (interp=0x1e04080, st=0x7fff074e87f0,
    val=0x1f00d60) at src/nci.c:147
#3  0x00007fc7fecb9fdf in pcf_P_JPPP (interp=0x1e04080, self=0x1edb6e0)
    at src/nci.c:565
#4  0x00007fc7fedd333a in Parrot_NCI_invoke (interp=0x1e04080, pmc=0x1edb6e0,
    next=0x0) at ./src/pmc/nci.pmc:320
#5  0x00007fc7fec985b9 in Parrot_pcc_invoke_from_sig_object (interp=0x1e04080,
    sub_obj=0x1edb6e0, sig_obj=0x1f00eb0) at src/call/pcc.c:2978
#6  0x00007fc7fecac3b0 in Parrot_mmd_multi_dispatch_from_c_args (
    interp=0x1e04080, name=0x7fc7fef2c616 ""subtract"",
    sig=0x7fc7fef2c60f ""PPP->P"") at src/multidispatch.c:337
#7  0x00007fc7fed9a19f in Parrot_default_subtract (interp=0x1e04080,
    pmc=0x1f01630, value=0x1f00ee0, dest=0x1e91a40)
    at ./src/pmc/default.pmc:1281
#8  0x00007fc7fee7c766 in Parrot_Object_subtract (interp=0x1e04080,
    pmc=0x1f01630, value=0x1f00ee0, dest=0x1e91a40) at ./src/pmc/object.c:7482
#9  0x00007fc7fec104c8 in Parrot_sub_p_p_p (cur_opcode=0x1f60388,
    interp=0x1e04080) at src/ops/math.ops:884
#10 0x00007fc7fece8d65 in runops_slow_core (interp=0x1e04080, pc=0x1f60388)
    at src/runops_cores.c:451
#11 0x00007fc7fec9fc45 in runops_int (interp=0x1e04080, offset=0)
    at src/interpreter.c:978
#12 0x00007fc7feca074a in runops (interp=0x1e04080, offs=0)
    at src/call/ops.c:106
#13 0x00007fc7feca0af8 in runops_args (interp=0x1e04080, sub=0x1f03070,
    obj=0x1e91a40, meth_unused=0x0, sig=0x7fc7fef23673 ""vP"", ap=0x7fff074ecdf0)
    at src/call/ops.c:246
#14 0x00007fc7feca1eac in Parrot_runops_fromc_args (interp=0x1e04080,
    sub=0x1f03070, sig=0x7fc7fef23673 ""vP"") at src/call/ops.c:313
#15 0x00007fc7fec7b7ee in Parrot_runcode (interp=0x1e04080, argc=1,
    argv=0x7fff074ed0f0) at src/embed.c:984
#16 0x00007fc7feef8374 in imcc_run_pbc (interp=0x1e04080, obj_file=0,
    output_file=0x0, argc=1, argv=0x7fff074ed0f0) at compilers/imcc/main.c:824
#17 0x00007fc7feef9007 in imcc_run (interp=0x1e04080,
    sourcefile=0x7fff074edf99 ""ron.pir"", argc=1, argv=0x7fff074ed0f0)
    at compilers/imcc/main.c:1111
#18 0x0000000000400c14 in main (argc=1, argv=0x7fff074ed0f0) at src/main.c:61
(gdb) print ctx
$7 = (Parrot_Context *) 0x1f63ee0
(gdb) print ctx->constants
$8 = (struct PackFile_Constant **) 0x1f60420
(gdb) print *pc
$9 = 140733315992448
(gdb)
(gdb) print pc[-1]
$10 = 0
(gdb) print pc[1]
$11 = 140733315992240
}}}

"	bug	closed	normal		none		fatal	fixed					
