On Mon Sep 01 10:19:19 2008, cognominal wrote: > One can crash calling rakudo on a file containing > > eval 'class A { has $.a}; my $a = A.new();'; > eval 'class A { has $.a}; my $a = A.new();'; > eval 'class A { has $.a}; my $a = A.new();'; > > or by executing thrice the line > class A { has $.a}; my $a = A.new() > interactively in rakudo. > This is reproduceable on Mac OS X Leopard and cygwin. > The stack seems strange to me, it seems that the context of the eval > is left on the stack when it should not as a result we have many > runloops in the stack. > > > > The stack trace is : > > Exception Type: EXC_BAD_ACCESS (SIGBUS) > Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000008 > Crashed Thread: 0 > > Thread 0 Crashed: > 0 libparrot.dylib 0x00702c4d create_lexinfo + 317 > (pbc.c:993) > 1 libparrot.dylib 0x007033c2 add_const_pmc_sub + 1202 > (pbc.c:1193) > 2 libparrot.dylib 0x0070485a e_pbc_emit + 570 > (pbc.c:1865) > 3 libparrot.dylib 0x006f9397 emit_flush + 199 > (instructions.c:869) > 4 libparrot.dylib 0x006f3c7e imc_compile_unit + 62 > (imc.c:118) > 5 libparrot.dylib 0x006f3dce imc_close_unit + 30 > (imc.c:223) > 6 libparrot.dylib 0x006e8128 yyparse + 3208 > (imcc.y:718) > 7 libparrot.dylib 0x006f39b5 compile_string + 197 > (imcc.l:1342) > 8 libparrot.dylib 0x00706ed7 imcc_compile + 519 > (parser_util.c:802) > 9 libparrot.dylib 0x007071ee imcc_compile_pir_ex + 46 > (parser_util.c:986) > 10 libparrot.dylib 0x00540ac8 pcf_P_Jt + 120 > (nci.c:235) > 11 libparrot.dylib 0x0062f340 Parrot_NCI_invoke + 176 > (nci.pmc:310) > 12 libparrot.dylib 0x004be05b Parrot_invokecc_p + 107 > (core.ops:463) > 13 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 14 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 15 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 16 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 17 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 18 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 19 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 20 libparrot.dylib 0x005f940f cant_do_method + 79 > (default.pmc:63) > 21 libparrot.dylib 0x005fc089 > Parrot_default_get_string + 41 (default.c:1345) > 22 libparrot.dylib 0x00569e26 fail_if_type_exists + > 166 (oo.c:619) > 23 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 24 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 25 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 26 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 27 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 28 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 29 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 30 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 31 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 32 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 33 libparrot.dylib 0x0056b6e0 run_sub + 112 > (packfile.c:496) > 34 libparrot.dylib 0x0056b935 do_1_sub_pragma + 565 > (packfile.c:589) > 35 libparrot.dylib 0x0056bbb1 do_sub_pragmas + 289 > (packfile.c:722) > 36 libparrot.dylib 0x005701c9 PackFile_fixup_subs + 41 > (packfile.c:3812) > 37 libparrot.dylib 0x00706f46 imcc_compile + 630 > (parser_util.c:822) > 38 libparrot.dylib 0x007071ee imcc_compile_pir_ex + 46 > (parser_util.c:986) > 39 libparrot.dylib 0x00540ac8 pcf_P_Jt + 120 > (nci.c:235) > 40 libparrot.dylib 0x0062f340 Parrot_NCI_invoke + 176 > (nci.pmc:310) > 41 libparrot.dylib 0x004be05b Parrot_invokecc_p + 107 > (core.ops:463) > 42 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 43 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 44 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 45 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 46 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 47 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 48 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 49 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 50 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 51 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 52 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 53 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 54 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 55 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 56 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 57 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 58 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 59 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 60 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 61 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 62 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 63 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 64 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 65 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 66 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 67 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 68 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 69 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 70 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 71 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 72 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 73 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 74 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 75 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 76 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 77 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 78 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 79 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 80 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 81 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 82 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 83 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 84 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 85 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 86 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 87 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 88 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 89 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 90 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 91 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 92 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 93 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 94 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 95 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 96 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 97 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 98 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 99 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 100 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 101 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 102 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 103 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 104 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 105 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 106 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 107 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 108 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 109 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 110 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 111 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 112 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 113 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 114 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 115 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 116 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 117 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 118 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 119 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 120 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 121 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 122 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 123 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 124 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 125 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 126 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 127 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 128 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 129 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 130 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 131 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 132 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 133 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 134 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 135 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 136 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 137 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 138 libparrot.dylib 0x0052348c Parrot_ex_throw_from_c + > 444 (exceptions.c:297) > 139 libparrot.dylib 0x00523563 > Parrot_ex_throw_from_c_args + 195 (exceptions.c:339) > 140 libparrot.dylib 0x00569e5e fail_if_type_exists + > 222 (oo.c:623) > 141 libparrot.dylib 0x00569ec8 Parrot_oo_register_type > + 24 (oo.c:653) > 142 libparrot.dylib 0x0067ccf8 init_class_from_hash + > 584 (class.pmc:222) > 143 libparrot.dylib 0x0067e74b Parrot_Class_init_pmc + > 555 (class.c:844) > 144 libparrot.dylib 0x005757d0 pmc_new_init + 176 > (pmc.c:369) > 145 libparrot.dylib 0x004d395b Parrot_newclass_p_p + 59 > (object.ops:249) > 146 libparrot.dylib 0x005761a7 runops_slow_core + 183 > (runops_cores.c:222) > 147 libparrot.dylib 0x00536d4f runops_int + 447 > (interpreter.c:942) > 148 libparrot.dylib 0x005376d2 runops + 194 > (inter_run.c:105) > 149 libparrot.dylib 0x00537974 runops_args + 436 > (inter_run.c:237) > 150 libparrot.dylib 0x00537aa9 Parrot_runops_fromc_args > + 73 (inter_run.c:300) > 151 libparrot.dylib 0x00520b0c Parrot_runcode + 764 > (embed.c:952) > 152 libparrot.dylib 0x006f5779 imcc_run_pbc + 265 > (main.c:784) > 153 libparrot.dylib 0x006f621d imcc_run + 861 > (main.c:1073) > 154 parrot 0x00001fb9 main + 185 (main.c:61) > 155 parrot 0x00001ec6 start + 54 >
With an Altanta-era rakudo, this works fine: $ cat foo.p6 eval 'class A { has $.a}; my $a = A.new();'; eval 'class A { has $.a}; my $a = A.new();'; eval 'class A { has $.a}; my $a = A.new();'; say "alive"; $ ./perl6 foo.p6 alive Assigning ticket to moritz in case he can wishes to add this as a test. Thanks for the report! -- Will "Coke" Coleda