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

Reply via email to