* stabsread.c (read_member_functions): Skip member functions which
authorDaniel Jacobowitz <drow@false.org>
Fri, 7 Dec 2001 23:30:13 +0000 (23:30 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 7 Dec 2001 23:30:13 +0000 (23:30 +0000)
        are duplicates of the callable constructor/destructor.

gdb/ChangeLog
gdb/stabsread.c

index 37920f2c6890c3498d4a13e8667fad991707ccb2..184cda83ef362094975af8531e0f075faf4e83e9 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-07  Daniel Jacobowitz  <drow@mvista.com>
+
+       * stabsread.c (read_member_functions): Skip member functions which
+       are duplicates of the callable constructor/destructor.
+
 2001-12-07  Jim Blandy  <jimb@redhat.com>
 
        * s390-tdep.c (s390_store_return_value): Don't convert float
index 8a46acf9b014f298fcd90bfdf887507a7d444c0c..7b682427fb4578e0cdfc37745b46a1351de5356a 100644 (file)
@@ -2953,6 +2953,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 {
   int nfn_fields = 0;
   int length = 0;
+  int skip_method;
   /* Total number of member functions defined in this class.  If the class
      defines two `f' functions, and one `g' function, then this will have
      the value 3.  */
@@ -2992,6 +2993,36 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
       look_ahead_type = NULL;
       length = 0;
 
+      skip_method = 0;
+      if (p - *pp == strlen ("__base_ctor")
+         && strncmp (*pp, "__base_ctor", strlen ("__base_ctor")) == 0)
+       skip_method = 1;
+      else if (p - *pp == strlen ("__base_dtor")
+              && strncmp (*pp, "__base_dtor", strlen ("__base_dtor")) == 0)
+       skip_method = 1;
+      else if (p - *pp == strlen ("__deleting_dtor")
+              && strncmp (*pp, "__deleting_dtor",
+                          strlen ("__deleting_dtor")) == 0)
+       skip_method = 1;
+
+      if (skip_method)
+       {
+         /* Skip past '::'.  */
+         *pp = p + 2;
+         /* Read the type.  */
+         read_type (pp, objfile);
+         /* Skip past the colon, mangled name, semicolon, flags, and final
+            semicolon.  */
+         while (**pp != ';')
+           (*pp) ++;
+         (*pp) ++;
+         while (**pp != ';')
+           (*pp) ++;
+         (*pp) ++;
+
+         continue;
+       }
+
       new_fnlist = (struct next_fnfieldlist *)
        xmalloc (sizeof (struct next_fnfieldlist));
       make_cleanup (xfree, new_fnlist);