From 022d41663ddcc03460e411e390eeb0ccada393d5 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 27 Aug 2006 21:42:55 +0000 Subject: [PATCH] re PR other/28797 (Problems with demangling (__cxa_demangle())) PR other/28797 * cp-demangle.c (d_pointer_to_member_type): Do add a substitution for a qualified member which is not a function. * testsuite/demangle-expected: Add test case. From-SVN: r116493 --- libiberty/ChangeLog | 7 +++++++ libiberty/cp-demangle.c | 11 ++++++++++- libiberty/testsuite/demangle-expected | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 745a2f4..27280a3 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,10 @@ +2006-08-27 Ian Lance Taylor + + PR other/28797 + * cp-demangle.c (d_pointer_to_member_type): Do add a substitution + for a qualified member which is not a function. + * testsuite/demangle-expected: Add test case. + 2006-07-27 Jan Hubicka PR rtl-optimization/28071 diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 109d533..c7ee878 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -2081,13 +2081,22 @@ d_pointer_to_member_type (struct d_info *di) g++ does not work that way. g++ treats only the CV-qualified member function as a substitution source. FIXME. So to work with g++, we need to pull off the CV-qualifiers here, in order to - avoid calling add_substitution() in cplus_demangle_type(). */ + avoid calling add_substitution() in cplus_demangle_type(). But + for a CV-qualified member which is not a function, g++ does + follow the ABI, so we need to handle that case here by calling + d_add_substitution ourselves. */ pmem = d_cv_qualifiers (di, &mem, 1); if (pmem == NULL) return NULL; *pmem = cplus_demangle_type (di); + if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE) + { + if (! d_add_substitution (di, mem)) + return NULL; + } + return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem); } diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index fa2a2fe..4aaa3d6 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -3805,3 +3805,9 @@ java::lang::Math::acos(double)double _Z4makeI7FactoryiET_IT0_Ev make()Factory make +# +# From PR 28797 +--format=auto --no-params +_Z1fM1AKiPKS1_ +f(int const A::*, int const A::* const*) +f -- 2.7.4