merge from gcc
authorDJ Delorie <dj@redhat.com>
Tue, 16 Dec 2003 00:58:45 +0000 (00:58 +0000)
committerDJ Delorie <dj@redhat.com>
Tue, 16 Dec 2003 00:58:45 +0000 (00:58 +0000)
libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/testsuite/demangle-expected

index cd7200d0404edb77b2f5c1ddc22ebb4934175327..0a027a0c4567f645316f9b76ab2f37253a9f6145 100644 (file)
@@ -1,3 +1,14 @@
+2003-12-15  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (d_print_function_type): Print the function
+       parameters with no modifiers.
+       * testsuite/demangle-expected: Add test case.
+
+       * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't
+       expect that we've read the entire string.
+       (is_ctor_or_dtor): Don't expect that we've read the entire
+       string--reverse patch of 2003-11-29.
+
 2003-12-15  Brendan Kehoe  <brendan@zen.org>
 
        * libiberty/Makefile.in (floatformat.o): Add dependency on
index e675752bbaacfaffc7a4fd833a89f8b846503f9d..f6c0543c8c3cbfbd0504d362ab43183da632037d 100644 (file)
@@ -3396,7 +3396,14 @@ d_print_function_type (dpi, dc, mods)
   d_append_char (dpi, '(');
 
   if (d_right (dc) != NULL)
-    d_print_comp (dpi, d_right (dc));
+    {
+      struct d_print_mod *hold_modifiers;
+
+      hold_modifiers = dpi->modifiers;
+      dpi->modifiers = NULL;
+      d_print_comp (dpi, d_right (dc));
+      dpi->modifiers = hold_modifiers;
+    }
 
   d_append_char (dpi, ')');
 
@@ -3622,9 +3629,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')
+  /* If DMGL_PARAMS is set, then if we didn't consume the entire
+     mangled string, then we didn't successfully demangle it.  If
+     DMGL_PARAMS is not set, we didn't look at the trailing
+     parameters.  */
+  if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
     dc = NULL;
 
 #ifdef CP_DEMANGLE_DEBUG
@@ -3829,37 +3838,37 @@ is_ctor_or_dtor (mangled, ctor_kind, dtor_kind)
 
   dc = d_mangled_name (&di, 1);
 
+  /* Note that because we did not pass DMGL_PARAMS, we don't expect to
+     demangle the entire string.  */
+
   ret = 0;
-  if (d_peek_char (&di) == '\0')
+  while (dc != NULL)
     {
-      while (dc != NULL)
+      switch (dc->type)
        {
-         switch (dc->type)
-           {
-           default:
-             dc = NULL;
-             break;
-           case D_COMP_TYPED_NAME:
-           case D_COMP_TEMPLATE:
-           case D_COMP_RESTRICT_THIS:
-           case D_COMP_VOLATILE_THIS:
-           case D_COMP_CONST_THIS:
-             dc = d_left (dc);
-             break;
-           case D_COMP_QUAL_NAME:
-             dc = d_right (dc);
-             break;
-           case D_COMP_CTOR:
-             *ctor_kind = dc->u.s_ctor.kind;
-             ret = 1;
-             dc = NULL;
-             break;
-           case D_COMP_DTOR:
-             *dtor_kind = dc->u.s_dtor.kind;
-             ret = 1;
-             dc = NULL;
-             break;
-           }
+       default:
+         dc = NULL;
+         break;
+       case D_COMP_TYPED_NAME:
+       case D_COMP_TEMPLATE:
+       case D_COMP_RESTRICT_THIS:
+       case D_COMP_VOLATILE_THIS:
+       case D_COMP_CONST_THIS:
+         dc = d_left (dc);
+         break;
+       case D_COMP_QUAL_NAME:
+         dc = d_right (dc);
+         break;
+       case D_COMP_CTOR:
+         *ctor_kind = dc->u.s_ctor.kind;
+         ret = 1;
+         dc = NULL;
+         break;
+       case D_COMP_DTOR:
+         *dtor_kind = dc->u.s_dtor.kind;
+         ret = 1;
+         dc = NULL;
+         break;
        }
     }
 
index b39e2f4386b4829f467dab976856bf5812688562..7452338e1b3dd04df4c2f5fa8a74319569a03b4e 100644 (file)
@@ -2916,6 +2916,11 @@ void f<-1>()
 _ZNSdD0Ev
 std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
 #
+# Another case where we got member function qualifiers wrong.
+--format=gnu-v3
+_ZNK15nsBaseHashtableI15nsUint32HashKey8nsCOMPtrI4IFooEPS2_E13EnumerateReadEPF15PLDHashOperatorRKjS4_PvES9_
+nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead(PLDHashOperator (*)(unsigned int const&, IFoo*, void*), void*) const
+#
 # This caused an infinite loop.
 #
 # This is generated by an EDG compiler (kcc 4.0).  To demangle it