GDB PR 14065 has an executable which causes gdb to crash.

It crashes trying to demangle a certain symbol (see the included test
case).  The standalone demangler doesn't crash here, but you can still
see the failure with valgrind.

I'm not sure this is the proper fix, but it seemed correct, and it does
avoid the crash.

Ok?

Tom

2012-05-21  Tom Tromey  <tro...@redhat.com>

        http://sourceware.org/bugzilla/show_bug.cgi?id=14065
        * testsuite/demangle-expected: Add regression test.
        * cp-demangle.c (d_find_pack): Return NULL for
        DEMANGLE_COMPONENT_UNNAMED_TYPE.

diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index d95b56c..27cc323 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -3715,6 +3715,7 @@ d_find_pack (struct d_print_info *dpi,
     case DEMANGLE_COMPONENT_SUB_STD:
     case DEMANGLE_COMPONENT_CHARACTER:
     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
+    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
       return NULL;
 
     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
diff --git a/libiberty/testsuite/demangle-expected 
b/libiberty/testsuite/demangle-expected
index d489692..58c1368 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -4266,3 +4266,7 @@ foo
 _Z1fIKFvvES0_Evv
 void f<void () const, void ()>()
 f<void () const, void ()>
+#
+--format=gnu-v3
+_ZN4modc6parser8sequenceINS_9astParser13LocatedParserINS0_9ParserRefINS2_UlRNS2_16TokenParserInputEE_EEEEEINS0_14OptionalParserINS2_18ListParserTemplateILNS_6tokens5Token4TypeE4EXadL_ZNSD_Ut_13parenthesizedEEEE6ParserINS4_INS0_6ParserIS5_NS_3ast10ExpressionEEEEEEEEENSA_INS4_INS2_22OneOfKeywordsToTParserINSJ_5StyleEEEEEEENS0_14SequenceParserIS5_INS0_18ExactElementParserIS5_EENSA_ISM_EEEEENS0_14RepeatedParserINS4_INS0_15TransformParserINSU_IS5_INS4_INSP_INSJ_10Annotation12RelationshipEEEEESX_EEENS2_UlNS2_3LocES12_ONS_5MaybeISK_EEE19_EEEEELb0EEEEEENSU_INS0_17ExtractParserTypeIT_E9InputTypeEINS0_8MaybeRefIS1F_E4TypeEDpNS1I_IT0_E4TypeEEEEOS1F_DpOS1L_
+modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 > >::InputType, 
modc::parser::MaybeRef<modc::astParser::{lambda(modc::astParser::Loc, 
modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}>::Type, 
modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > 
><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, 
&modc::tokens::{unnamed 
type#1}::parenthesized>::Parser::Annotation::Relationship> >, 
modc::parser::ExactElementParser> >, 
modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}> >, 
false><modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > > > >::Type, 
modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > 
><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, 
&modc::tokens::{unnamed 
type#1}::parenthesized>::Parser::Annotation::Relationship> >, 
modc::parser::ExactElementParser> >, 
modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}> >, 
false><modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 
><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > > >::Type, 
modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > 
><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, 
&modc::tokens::{unnamed 
type#1}::parenthesized>::Parser::Annotation::Relationship> >, 
modc::parser::ExactElementParser> >, 
modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}> >, 
false><modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>,
 
modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 ><modc::ast::Expression> > > >::Type, 
modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > 
><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, 
&modc::tokens::{unnamed 
type#1}::parenthesized>::Parser::Annotation::Relationship> >, 
modc::parser::ExactElementParser> >, 
modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}> >, 
false><modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > 
><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, 
&modc::tokens::{unnamed 
type#1}::parenthesized>::Parser::Annotation::Relationship> >, 
modc::parser::ExactElementParser> >, 
modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >::Type> 
modc::parser::sequence<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 >, 
modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > > >, 
modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 
><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > >, 
modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>,
 
modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 ><modc::ast::Expression> > >, 
modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> 
><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4,
 &modc::tokens::{unnamed 
type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput,
 modc::ast::Expression> > 
><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, 
&modc::tokens::{unnamed 
type#1}::parenthesized>::Parser::Annotation::Relationship> >, 
modc::parser::ExactElementParser> >, 
modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}> >, false> 
>(modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, 
modc::Maybe<modc::parser::Parser>&&)#21}&&, 
(modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}>
 > >&&)...)

Reply via email to