* stabsread.c (read_struct_fields): Don't call read_cpp_abbrev on $_.
authorJim Kingdon <jkingdon@engr.sgi.com>
Sun, 20 Jun 1993 20:30:31 +0000 (20:30 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Sun, 20 Jun 1993 20:30:31 +0000 (20:30 +0000)
(read_cpp_abbrev): Don't complain specially for $_.  Also return 0 if
we don't recognize the abbrev.

gdb/ChangeLog
gdb/stabsread.c

index a02196e50366ab315c4885163fb061a92e06f202..08f3e34f7388dddcab9b3dc517fcc04759855c71 100644 (file)
@@ -1,3 +1,9 @@
+Sun Jun 20 13:11:11 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * stabsread.c (read_struct_fields): Don't call read_cpp_abbrev on $_.
+       (read_cpp_abbrev): Don't complain specially for $_.  Also return 0 if
+       we don't recognize the abbrev.
+
 Sun Jun 20 00:24:41 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
        * solib.c (solib_add_common_symbols): Add comment about performance.
index 84edc569e5df80ed9325c9c0c5b7835b4ba78c75..784708da274fe769bfac5dad319a1296533aab41 100644 (file)
@@ -2134,14 +2134,13 @@ read_cpp_abbrev (fip, pp, type, objfile)
       fip->list->field.bitsize = 0;
       fip->list->visibility = VISIBILITY_PRIVATE;
     }
-  else if (*p == '_')
-    {
-      /* GNU C++ anonymous type.  */
-      complain (&stabs_general_complaint, "g++ anonymous type $_ not handled");
-    }
   else
     {
       complain (&invalid_cpp_abbrev_complaint, *pp);
+      /* We have no idea what syntax an unrecognized abbrev would have, so
+        better return 0.  If we returned 1, we would need to at least advance
+        *pp to avoid an infinite loop.  */
+      return 0;
     }
   return 1;
 }
@@ -2341,7 +2340,11 @@ read_struct_fields (fip, pp, type, objfile)
 
       /* Get the field name.  */
       p = *pp;
-      if (*p == CPLUS_MARKER)
+      /* If is starts with CPLUS_MARKER it is a special abbreviation, unless
+        the CPLUS_MARKER is followed by an underscore, in which case it is
+        just the name of an anonymous type, which we should handle like any
+        other type name.  */
+      if (*p == CPLUS_MARKER && p[1] != '_')
        {
          if (!read_cpp_abbrev (fip, pp, type, objfile))
            return 0;