# New Ticket Created by  Moritz Lenz 
# Please include the string:  [perl #64208]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=64208 >


In a parser I am writing I see a segmentation fault that shows up on a
piece of code like this:

method value($/, $what) {
    when * { make 1 } ;
}

(adding a given $what { ... } around it makes no difference). When I
write instead a simple 'make 1' or 'do { do { make 1 } }', it does not
segfault.

To reproduce this problem, do these steps:
git clone git://github.com/moritz/json.git
cd json
PERL6LIB=/path/to/your/rakudo/dir perl6 t/structure.t

This is the backtrace I get from running it with gdb:
[New Thread 0x7f47461b06f0 (LWP 25506)]
1..1

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f47461b06f0 (LWP 25506)]
0x00007f4745908920 in Parrot_callmethodcc_p_sc (cur_opcode=0x7f4746007390,
    interp=0x237a010) at src/ops/object.ops:59
59        PMC      * const method_pmc = VTABLE_find_method(interp,
object, meth);
(gdb) bt
#0  0x00007f4745908920 in Parrot_callmethodcc_p_sc
(cur_opcode=0x7f4746007390,
    interp=0x237a010) at src/ops/object.ops:59
#1  0x00007f47459dcf85 in runops_slow_core (interp=0x237a010,
    pc=0x7f4746007390) at src/runops_cores.c:461
#2  0x00007f474598a315 in runops_int (interp=0x237a010, offset=468)
    at src/interpreter.c:980
#3  0x00007f474598ae1a in runops (interp=0x237a010, offs=468)
    at src/call/ops.c:107
#4  0x00007f474598b1f6 in runops_args (interp=0x237a010,
sub=0x7f4741bda090,
    obj=0x2405810, meth_unused=0x0, sig=0x7f4745c17124 "vP",
ap=0x7fff4e1d7270)
    at src/call/ops.c:254
#5  0x00007f474598c5ac in Parrot_runops_fromc_args (interp=0x237a010,
    sub=0x7f4741bda090, sig=0x7f4745c17124 "vP") at src/call/ops.c:321
#6  0x00007f474596979f in Parrot_ex_throw_from_c (interp=0x237a010,
    exception=0x7f4741bd9f70) at src/exceptions.c:341
#7  0x00007f4745969974 in Parrot_ex_throw_from_c_args (interp=0x237a010,
    ret_addr_unused=0x0, exitcode=51,
    format=0x7f4745c1e790 "can't convert unicode string to ascii")
    at src/exceptions.c:410
#8  0x00007f4745a84003 in to_ascii (interp=0x237a010, src=0x4707528,
    dest=0x47074e0) at src/string/charset/ascii.c:279
#9  0x00007f4745a84989 in to_charset (interp=0x237a010, src=0x4707528,
    dest=0x47074e0) at src/string/charset/ascii.c:340
#10 0x00007f47458e89e1 in Parrot_str_change_charset (interp=0x237a010,
    src=0x4707528, charset_nr=0, dest=0x47074e0) at src/string/api.c:2963
#11 0x00007f474590feca in Parrot_trans_charset_s_s_i (
    cur_opcode=0x7f4740e77028, interp=0x237a010) at src/ops/string.ops:555
#12 0x00007f47459dcf85 in runops_slow_core (interp=0x237a010,
    pc=0x7f4740e77028) at src/runops_cores.c:461
#13 0x00007f474598a315 in runops_int (interp=0x237a010, offset=21854)
    at src/interpreter.c:980
#14 0x00007f474598ae1a in runops (interp=0x237a010, offs=21854)
    at src/call/ops.c:107
#15 0x00007f474598b1f6 in runops_args (interp=0x237a010,
sub=0x7f4742c28390,
    obj=0x2405810, meth_unused=0x0, sig=0x7f4745c168ab "vP",
ap=0x7fff4e1d77a0)
    at src/call/ops.c:254
#16 0x00007f474598c5ac in Parrot_runops_fromc_args (interp=0x237a010,
    sub=0x7f4742c28390, sig=0x7f4745c168ab "vP") at src/call/ops.c:321
#17 0x00007f4745965d3e in Parrot_runcode (interp=0x237a010, argc=2,
    argv=0x7fff4e1d79d8) at src/embed.c:1011
#18 0x0000000000400cbd in main ()


Cheers,
Moritz

Reply via email to