bug-lilypond
[Top][All Lists]
Advanced

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

Regression in 2.14.2, dynamic cast crash introduced in commit 6f6369c0


From: Pavel Roskin
Subject: Regression in 2.14.2, dynamic cast crash introduced in commit 6f6369c0
Date: Mon, 7 Nov 2011 18:27:05 -0500

Hello!

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

\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'
Parsing...
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          }
79      
80        Engraver_group *dad_eng
81          = dad_con
82          ? dynamic_cast<Engraver_group *> (dad_con->implementation
()) 83      : 0;
84      
85        if (dad_eng)
86          dad_eng->announce_grob (info);
87      }
(gdb) 

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++.

-- 
Regards,
Pavel Roskin



reply via email to

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