Dan Sugalski wrote: First I want to thank you, for all the checkins. (Please don't forget #17143, which makes predereferencing working)
> Do we have any idea why GC's getting in the way here? I presume we have > GC bug, so we ought to track it down if we can. I can only bring some hints: - test failures are not the same, when run through parrot or imcc - imcc uses a global interpreter variable, whereas parrot's is on stack. - parrot fails currently only one test: t/compiler/8_5 turnning gc off and tracing both brings this diff: PC=462; OP=656 (save_p); ARGS=(P1) PC=464; OP=672 (restoreall) PC=465; OP=741 (ret) -Wrong type on top of stack! e.g. the last instruction of main fails, failure looks like stack corruption. - imcc with GC turned off passes all tests - imcc with GC on fails these: Failed Test Status Wstat Total Fail Failed List of failed ------------------------------------------------------------------------------- t/compiler/1.te 12 1 8,33% 11 t/compiler/8.te 6 1 16,67% 5 t/compiler/qsor 1 1 100,00% 1 t/rx/call.test 2 2 100,00% 1-2 2 subtests skipped. 1_11: ===== -1003.100000PC=859; OP=26 (print_sc); ARGS=("\n") - -PC=861; OP=636 (popp) +1003.100000PC=859; OP=26 (print_sc); ARGS=("^C") +^CPC=861; OP=636 (popp) i.e. (1 byte) corruption in the constant table -d shows 22 collect runs, 3 DOD 8_5: ==== same as parrot (stack) (# of DOD unavailable, it dies) qsort_1 ======= prints garbage numbers, 3 DOD runs, 0 collect probably stack corruption, qsort is recursive. t/rc/call_1 =========== constant table corruption: PC=334; OP=93 (set_p_s); ARGS=(P0, S1="sdf") -PC=337; OP=138 (set_p_kc_p); ARGS=(P2, ["thing"], P0) +PC=337; OP=138 (set_p_kc_p); ARGS=(P2, ["`=^\0"], P0) (2 DOD, 2 collect) t/rc/call_2 =========== constant table corruption: PC=260; OP=93 (set_p_s); ARGS=(P0, S1="22") -PC=263; OP=138 (set_p_kc_p); ARGS=(P5, ["two_of"], P0) +PC=263; OP=138 (set_p_kc_p); ARGS=(P5, ["ì>^\0\0"], P0) (10 DOD, 4 collect) Some more: ========== perl6 examples/life.p6 10 - 10 gens of life, ok with parrot perl6 -r -Rd examples/life.p6 10 - 10 gens of life, with imcc, runs very (~13 sec) long: *** Parrot VM: Dumping GC info *** Total memory allocated: 352256 Total DOD runs: 1118 Total collector runs: 19 Active PMCs: 17 Active buffers: 29 Total PMCs: 256 Total buffers: 88064 Since last collection: Header allocations: 0 Memory allocations: 0 and prints garbage. Actually the amount of DOD runs is way to high perl6 -r -RG examples/life.p6 10 GC off, with imcc, runs 3 seconds, result ok $ time perl6 -vw examples/mandel.p6 P6C 'examples/mandel.p6' Parse error [line 28]: Invalid statement near "my @b = (" ", ... (currently br0ken ;-) So far, what I have. What could I do, to help track GC bugs? down? leo