[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Issue 2030 in lilypond: 2.14.2, dynamic cast crash introduced in commit

From: lilypond
Subject: Issue 2030 in lilypond: 2.14.2, dynamic cast crash introduced in commit 6f6369c0
Date: Tue, 08 Nov 2011 16:23:15 +0000

Status: Accepted
Owner: ----
Labels: Type-Crash

New issue 2030 by address@hidden: 2.14.2, dynamic cast crash introduced in commit 6f6369c0


Lilypond 2.14.2 and the current revision from stable/2.14 crash on this

\version "2.14.2"
\score {
 \new PianoStaff <<
   \new Staff = "right" { \change Staff="left" }
   \new Staff = "left" { s1 }
 \layout { }

Bisection finds that the regression was introduced on the stable branch
(!!!) by this commit:

6f6369c0e143402296e51708fddb8e3cc875dd09 is the first bad commit
commit 6f6369c0e143402296e51708fddb8e3cc875dd09
Author: Joe Neeman <address@hidden>
Date:   Fri May 27 18:57:16 2011 +0300

   Emit not-quite-cross-staff beams in the right context.

   This is related to 1043 and possibly other bugs.  Previously,
   if a staff change happened immediately after the termination of
   an auto-engraved cross-staff beam, then the beam was parented
   to the wrong staff.  Now, every beam is parented to the context
   in which it began.

:040000 040000 9fb6f0e342f2e64ca9b56c2d6e0d02556895e983
f248a9e0cc58847fddc0ad98e7eb839b8d3dbc60 M      lily

And that's what gdb shows for the current stable/2.14:

GNU LilyPond 2.14.2
Processing `bad.ly'
Interpreting music...
Program received signal SIGSEGV, Segmentation fault.
__cxxabiv1::__dynamic_cast (src_ptr=0x7fffffffffff, src_type=0xae1870,
dst_type=0xad9ea0, src2dst=-1)
at ../../../../libstdc++-v3/libsupc++/dyncast.cc:51 51    const
void *vtable = *static_cast <const void *const *> (src_ptr); (gdb) up
#1  0x000000000054cef4 in Engraver_group::announce_grob (this=0xc8c840,
info=...) at engraver-group.cc:83 83        : 0; (gdb) l
78          }
80        Engraver_group *dad_eng
81          = dad_con
82          ? dynamic_cast<Engraver_group *> (dad_con->implementation
()) 83      : 0;
85        if (dad_eng)
86          dad_eng->announce_grob (info);
87      }

dad_con was introduced by the commit in question.  It looks like
dad_con->implementation is of a wrong type.  I hope it should be easy
to fix for somebody who knows C++.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]