Commit 022d4166 by Ian Lance Taylor Committed by Ian Lance Taylor

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
parent 99f4234a
2006-08-27 Ian Lance Taylor <ian@airs.com>
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 <jh@suse.cz> 2006-07-27 Jan Hubicka <jh@suse.cz>
PR rtl-optimization/28071 PR rtl-optimization/28071
......
...@@ -2081,13 +2081,22 @@ d_pointer_to_member_type (struct d_info *di) ...@@ -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 g++ does not work that way. g++ treats only the CV-qualified
member function as a substitution source. FIXME. So to work member function as a substitution source. FIXME. So to work
with g++, we need to pull off the CV-qualifiers here, in order to 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); pmem = d_cv_qualifiers (di, &mem, 1);
if (pmem == NULL) if (pmem == NULL)
return NULL; return NULL;
*pmem = cplus_demangle_type (di); *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); return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
} }
......
...@@ -3805,3 +3805,9 @@ java::lang::Math::acos(double)double ...@@ -3805,3 +3805,9 @@ java::lang::Math::acos(double)double
_Z4makeI7FactoryiET_IT0_Ev _Z4makeI7FactoryiET_IT0_Ev
make<Factory, int>()Factory<int> make<Factory, int>()Factory<int>
make<Factory, int> make<Factory, int>
#
# From PR 28797
--format=auto --no-params
_Z1fM1AKiPKS1_
f(int const A::*, int const A::* const*)
f
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment