* gnu-v3-abi.c (gnuv3_rtti_type): If we get confused, just warn
authorJason Merrill <jason@redhat.com>
Fri, 3 May 2002 19:38:29 +0000 (19:38 +0000)
committerJason Merrill <jason@redhat.com>
Fri, 3 May 2002 19:38:29 +0000 (19:38 +0000)
        and return NULL.

gdb/ChangeLog
gdb/gnu-v3-abi.c

index 88d38de7ce1e438ff735d4acb96b1cb7544985a2..6340748b63ae364a77bc4495f87866dfa2bbb290 100644 (file)
@@ -1,3 +1,8 @@
+2002-05-03  Jason Merrill  <jason@redhat.com>
+
+       * gnu-v3-abi.c (gnuv3_rtti_type): If we get confused, just warn
+       and return NULL.
+
 2002-05-03  Michal Ludvig  <mludvig@suse.cz>
 
        * x86-64-tdep.c (x86_64_dwarf2gdb_regno_map),
index ae2104d59c4720ecfe3ba6a79070e20e7dd65cba..720364bf8ad567d6468b32f3530e0a0ab7cacfa1 100644 (file)
@@ -241,22 +241,33 @@ gnuv3_rtti_type (struct value *value,
   vtable_symbol_name = SYMBOL_DEMANGLED_NAME (vtable_symbol);
   if (vtable_symbol_name == NULL
       || strncmp (vtable_symbol_name, "vtable for ", 11))
-    error ("can't find linker symbol for virtual table for `%s' value",
-           TYPE_NAME (value_type));
+    {
+      warning ("can't find linker symbol for virtual table for `%s' value",
+              TYPE_NAME (value_type));
+      if (vtable_symbol_name)
+       warning ("  found `%s' instead", vtable_symbol_name);
+      return NULL;
+    }
   class_name = vtable_symbol_name + 11;
 
   /* Try to look up the class name as a type name.  */
   class_symbol = lookup_symbol (class_name, 0, STRUCT_NAMESPACE, 0, 0);
   if (! class_symbol)
-    error ("can't find class named `%s', as given by C++ RTTI", class_name);
+    {
+      warning ("can't find class named `%s', as given by C++ RTTI", class_name);
+      return NULL;
+    }
 
   /* Make sure the type symbol is sane.  (An earlier version of this
      code would find constructor functions, who have the same name as
      the class.)  */
   if (SYMBOL_CLASS (class_symbol) != LOC_TYPEDEF
       || TYPE_CODE (SYMBOL_TYPE (class_symbol)) != TYPE_CODE_CLASS)
-    error ("C++ RTTI gives a class name of `%s', but that isn't a type name",
-           class_name);
+    {
+      warning ("C++ RTTI gives a class name of `%s', but that isn't a type name",
+              class_name);
+      return NULL;
+    }
 
   /* This is the object's run-time type!  */
   run_time_type = SYMBOL_TYPE (class_symbol);