Due to the crash with the part-combiner (which I cannot reproduce, unfortunately), I'm currently taking a closer look at lilypond with valgrind.
1) Somehow the Rhythmic_head interface generates a "Conditional jump or move depends on uninitialised value(s)" warning (none of the other ADD_INTERFACE calls does, only Rhythmic_head): ==1979== Conditional jump or move depends on uninitialised value(s) ==1979== at 0x409F42C: scm_gc_mark (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40DA964: scm_i_symbol_mark (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x409F227: scm_gc_mark_dependencies (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x409F44B: scm_gc_mark (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x409F4F9: scm_mark_locations (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40F5511: scm_threads_mark_stacks (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x409F539: scm_mark_all (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x409E54B: scm_i_gc (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40A02AA: ??? (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40A079F: scm_gc_malloc (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40DAA0C: ??? (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40DAED4: scm_i_make_string (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40DB21D: scm_from_locale_stringn (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x40DB274: scm_from_locale_string (in /usr/lib/libguile.so.17.3.1) ==1979== by 0x8103144: add_interface(char const*, char const*, char const*) (grob-interface.cc:40) ==1979== by 0x81ECA21: Rhythmic_head_init_ifaces() (rhythmic-head.cc:62) ==1979== by 0x810E99F: ly_init_ly_module(void*) (guile-init.cc:45) This is from running only "valgrind --trace-children=yes lilypond" without any arguments or files to process, so that happends during initialization. The offending string in scm_from_locale_string is the description, i.e. "Note head or rest." in rhythmic-head.cc. I fail to see any different to other interfaces, which do not trigger such a warning. Any idea what might be wrong here? 2) The example for the 2.13.47 crash posted to the bug list does not crash here, but running it through valgrind shows a lot of warnings like the following: ==1739== Use of uninitialised value of size 4 ==1739== at 0x81D084A: Prob::mark_smob(scm_unused_struct*) (prob.cc:127) ==1739== by 0x409F211: scm_gc_mark_dependencies (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F44B: scm_gc_mark (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F4F9: scm_mark_locations (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40F5511: scm_threads_mark_stacks (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F539: scm_mark_all (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409E54B: scm_i_gc (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40A02AA: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x81554AB: Moment::smobbed_copy() const (moment.cc:58) ==1739== by 0x81640EF: ly_music_length(scm_unused_struct*) (music- scheme.cc:32) ==1739== by 0x4096748: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095612: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095811: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4094C5A: scm_dapply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40934A7: scm_apply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4098A10: scm_call_1 (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4036713: scm_srfi1_map (in /usr/lib/libguile-srfi-srfi-1- v-3.so.3.0.2) ==1739== by 0x4096813: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095612: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095811: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095612: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095811: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4094C5A: scm_dapply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40934A7: scm_apply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4098A10: scm_call_1 (in /usr/lib/libguile.so.17.3.1) ==1739== Uninitialised value was created by a stack allocation ==1739== at 0x409E424: scm_i_gc (in /usr/lib/libguile.so.17.3.1) or ==1739== Use of uninitialised value of size 4 ==1739== at 0x4086735: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F211: scm_gc_mark_dependencies (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F44B: scm_gc_mark (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F4F9: scm_mark_locations (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40F5511: scm_threads_mark_stacks (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409F539: scm_mark_all (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x409E54B: scm_i_gc (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40A02AA: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x81554AB: Moment::smobbed_copy() const (moment.cc:58) ==1739== by 0x81640EF: ly_music_length(scm_unused_struct*) (music- scheme.cc:32) ==1739== by 0x4096748: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095612: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095811: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4094C5A: scm_dapply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40934A7: scm_apply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4098A10: scm_call_1 (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4036713: scm_srfi1_map (in /usr/lib/libguile-srfi-srfi-1- v-3.so.3.0.2) ==1739== by 0x4096813: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095612: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095811: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095612: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4095811: ??? (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4094C5A: scm_dapply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x40934A7: scm_apply (in /usr/lib/libguile.so.17.3.1) ==1739== by 0x4098A10: scm_call_1 (in /usr/lib/libguile.so.17.3.1) ==1739== Uninitialised value was created by a stack allocation ==1739== at 0x82A5456: yyparse(void*) (parser.cc:2264) All of them have in common, that ly_music_length (or ly_moment_mul) and Moment::smobbed_copy are called and then the condition on the uninitialized value happens in scm_gc_mark function. Unfortunately, I'm unable to find out from where these are called, as it happens from scheme apparently, and valgrind does not provide any useful information about scheme calls... Any idea how to find out the offending code / moments? Thanks, Reinhold -- ------------------------------------------------------------------ Reinhold Kainhofer, [email protected], http://reinhold.kainhofer.com/ * Financial & Actuarial Math., Vienna Univ. of Technology, Austria * http://www.fam.tuwien.ac.at/, DVR: 0005886 * LilyPond, Music typesetting, http://www.lilypond.org _______________________________________________ lilypond-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/lilypond-devel
