2004-06-28 Ian Lance Taylor PR other/16240 * cp-demangle.c (d_expr_primary): Check for a failure return from cplus_demangle_type. * testsuite/demangle-expected: Add test case. --- libiberty/cp-demangle.c 25 Feb 2004 04:51:37 -0000 1.73 +++ libiberty/cp-demangle.c 28 Jun 2004 15:23:33 -0000 1.74 @@ -2398,6 +2398,8 @@ d_expr_primary (di) const char *s; type = cplus_demangle_type (di); + if (type == NULL) + return NULL; /* If we have a type we know how to print, we aren't going to print the type name itself. */ --- libiberty/testsuite/demangle-expected 25 Feb 2004 04:51:39 -0000 1.30 +++ libiberty/testsuite/demangle-expected 28 Jun 2004 17:36:27 -0000 1.31 @@ -3699,6 +3699,11 @@ _Z3fooIPA3_iEvRKT_ void foo(int (* const&) [3]) foo # +# This used to crash the demangler--PR 16240 +--format=gnu-v3 --no-params +_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE +_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE +PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue # Test GNU V3 constructor and destructor identification. # 0 means it is not a constructor/destructor. # Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h.