merge from gcc
This commit is contained in:
parent
13570a3db5
commit
24afc00d03
3 changed files with 30 additions and 4 deletions
|
@ -1,3 +1,13 @@
|
|||
2003-11-29 Ian Lance Taylor <ian@wasabisystems.com>
|
||||
|
||||
* cp-demangle.c (d_demangle): Only return success if we consumed
|
||||
the entire demangled string.
|
||||
(is_ctor_or_dtor): Likewise.
|
||||
|
||||
* testsuite/demangle-expected: Revert one part of 2003-06-26 patch
|
||||
to restore expected result of EDG test case to original expected
|
||||
result.
|
||||
|
||||
2003-11-26 Ian Lance Taylor <ian@wasabisystems.com>
|
||||
|
||||
* cp-demangle.c (struct d_print_mod): Add templates field.
|
||||
|
|
|
@ -3324,7 +3324,7 @@ d_print_cast (dpi, dc)
|
|||
/* It appears that for a templated cast operator, we need to put
|
||||
the template parameters in scope for the operator name, but
|
||||
not for the parameters. The effect is that we need to handle
|
||||
the template printing here. FIXME: Verify this. */
|
||||
the template printing here. */
|
||||
|
||||
hold_dpm = dpi->modifiers;
|
||||
dpi->modifiers = NULL;
|
||||
|
@ -3456,6 +3456,11 @@ d_demangle (mangled, options, palc)
|
|||
else
|
||||
dc = d_type (&di);
|
||||
|
||||
/* If we didn't consume the entire mangled string, then we didn't
|
||||
successfully demangle it. */
|
||||
if (d_peek_char (&di) != '\0')
|
||||
dc = NULL;
|
||||
|
||||
#ifdef CP_DEMANGLE_DEBUG
|
||||
if (dc == NULL)
|
||||
printf ("failed demangling\n");
|
||||
|
@ -3657,7 +3662,7 @@ is_ctor_or_dtor (mangled, ctor_kind, dtor_kind)
|
|||
|
||||
dc = d_mangled_name (&di, 1);
|
||||
|
||||
if (dc == NULL)
|
||||
if (dc == NULL || d_peek_char (&di) != '\0')
|
||||
return 0;
|
||||
|
||||
while (dc != NULL)
|
||||
|
|
|
@ -2889,10 +2889,21 @@ _Z1fP1cIPFiiEE
|
|||
f(c<int (*)(int)>*)
|
||||
#
|
||||
# This caused an infinite loop.
|
||||
# We still don't demangle this correctly, but at least we don't hang.
|
||||
#
|
||||
# This is generated by an EDG compiler (kcc 4.0). To demangle it
|
||||
# correctly, I believe that we have to understand that the J37J deep
|
||||
# in the string somehow refers back to the type starting 37 characters
|
||||
# in from some starting point, so that it winds up being the type
|
||||
# starting with 41THandle.... However, lacking a spec for EDG
|
||||
# demangling, it's hard to implement this.
|
||||
#
|
||||
# In the meantime, this symbol can be successfully demangled in GNU
|
||||
# mode. Of course the result is more or less nonsense, but an older
|
||||
# version of g++ would indeed generate this mangled name given the
|
||||
# appropriate input, so the demangling is correct.
|
||||
--format=auto
|
||||
__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator
|
||||
__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator
|
||||
_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator)
|
||||
#
|
||||
# This used to cause a crash. It doesn't follow the C++ encoding so
|
||||
# the demangled name should be identical to the original symbol name.
|
||||
|
|
Loading…
Reference in a new issue