analysis of libiberty/cp-demangle.c for libsupc++/__cxa_demangle
Mark Mitchell
mark@codesourcery.com
Tue Feb 24 01:51:00 GMT 2004
Ian Lance Taylor wrote:
> Mark Mitchell <mark@codesourcery.com> writes:
>
>
>>Ian Lance Taylor wrote:
>>
>>
>>>So by my reading, when given something like _X11TransParseAddress
>>>which is not a valid mangled name, it is correct for __cxa_demangle()
>>>to return NULL with status set to -2.
>>>What other reading could there be?
>>
>>The ABI implies that you can feed an 'extern "C"' name to __cxa_demangle.
>>
>>For example, it says that "i" should be demangled as "i".
>>
>>It's hard (for me) to see how to get that without considering "i" a
>>valid mangled name.
> The ABI says that an ambiguity
> between an extern "C" name and an internal built-in type name should
> be resolved in favor of the extern "C" name. It doesn't say what to
> return for an extern "C" name. That is, it doesn't say that
> __cxa_demangle() should return "i" when passed "i".
That's a clever reading. I'm not sure it's what was intended, but then
again I'm not sure that this particular interface was thought through
very well at all. We stayed away from these kinds of corner cases in
our ABI testsuite because it was indeed unclear what should be done.
> In fact, I'm just writing the disambiguation code now in my demangler,
> and my natural inclination is to write it so that when
> __cxa_demangle() is passed "i", it returns NULL with *status set to
> -2.
I guess that's OK. Obviously, you or Benjamin will have to update the
V3 testsuite. Perhaps you could submit a patch that includes both the
fixes for the demangler, Benjmain's tweakage of V3 to use your
demangler, and patches to the V3 testsuite so that all the tests still pass?
--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
More information about the Libstdc++
mailing list