https://codereview.appspot.com/576090043
This used to work as recently as 2.20.0, and it no longer does:
\version 2.21.1
\layout {
\context {
\type Engraver_group
\name GlobalRests
%\consists Staff_symbol_engraver
%\omit StaffSymbol
\consists Multi_measure_rest_engraver
}
\context {
\Score
\accepts GlobalRests
}
}
\score {
\new GlobalRests { R1 }
}
Uncommenting the Staff_symbol_engraver prevents the segfault from happening.
Here’s what gdb has to say:
Program received signal SIGSEGV, Segmentation fault.
Grob::internal_get_property (this=this@entry=0x0, sym=0x7fffe98e1ea0) at grob-property.cc:162
162 SCM val = get_property_data (this, sym);
Reported by Trevor B: https://lists.gnu.org/archive/html/lilypond-user/2020-05/msg00077.html
gdb would likely have a lot more to say if you told it
in order to get a backtrace. This only tells us that a property access on a non-existent grob goes wrong, but not where that property is getting accessed and, likely, what the property is.
Duh.
IIUC, the Multi_measure_rest_engraver now relies on line-positions to place the grob, hence the crash?
That sounds like a sensible guess given the backtrace. It would appear that line-positions on a non-existent StaffSymbol is a bad idea...
Fix #5964: MM Rests shouldn’t segfault when there’s no StaffSymbol.
https://codereview.appspot.com/576090043
Use `oneline’ when there’s either no staff OR a one-line staff
https://codereview.appspot.com/576090043
Passes make, make check and a full make doc.
Reg test diff attached
Patch on countdown for May 11th - although there are what look like relatively simple comments on Rietveld that need addressing
[proposal] Make Staff_symbol::line_count public and use it when <line_positions>’s not needed</line_positions>
https://codereview.appspot.com/576090043
Passes make, make check and a full make doc.
Reg test diff attached