OSDN Git Service

* cp-demangle.c (d_demangle): Only return success if we consumed
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Dec 2003 22:04:04 +0000 (22:04 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Dec 2003 22:04:04 +0000 (22:04 +0000)
the entire demangled string.
(is_ctor_or_dtor): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74129 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/cp-demangle.c

index 2f5f7b5..a6cfd9e 100644 (file)
@@ -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.
index bd67958..0fe568f 100644 (file)
@@ -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)