Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* PATCH to gnuv3_rtti_type
@ 2002-04-17 19:02 Jason Merrill
  2002-04-17 19:07 ` Daniel Jacobowitz
  2002-04-30 11:28 ` Jason Merrill
  0 siblings, 2 replies; 6+ messages in thread
From: Jason Merrill @ 2002-04-17 19:02 UTC (permalink / raw)
  To: gdb-patches; +Cc: Jason Merrill

[-- Attachment #1: Type: text/plain, Size: 544 bytes --]

gnuv3_rtti_type still gets confused sometimes, by constructor vtables and
namespaces at least.  This wouldn't be a big problem, as mostly I don't
care what the real type is, except that it gives an error and aborts.  If
I'm just trying to print the contents of a pointer, this is rather
annoying.

This patch changes the errors to warnings, so that I get the normal output
which is all I really care about.

OK?

2002-04-14  Jason Merrill  <jason@redhat.com>

	* gnu-v3-abi.c (gnuv3_rtti_type): If we get confused, just warn
	and return NULL.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 2470 bytes --]

*** gnu-v3-abi.c.~1~	Sun Mar 17 17:10:01 2002
--- gnu-v3-abi.c	Sun Apr 14 22:59:39 2002
*************** gnuv3_rtti_type (struct value *value,
*** 241,262 ****
    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));
    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);
  
    /* 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);
  
    /* This is the object's run-time type!  */
    run_time_type = SYMBOL_TYPE (class_symbol);
--- 241,273 ----
    vtable_symbol_name = SYMBOL_DEMANGLED_NAME (vtable_symbol);
    if (vtable_symbol_name == NULL
        || strncmp (vtable_symbol_name, "vtable for ", 11))
!     {
!       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)
!     {
!       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)
!     {
!       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);

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2002-05-03 21:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-17 19:02 PATCH to gnuv3_rtti_type Jason Merrill
2002-04-17 19:07 ` Daniel Jacobowitz
2002-04-30 11:28 ` Jason Merrill
2002-04-30 12:10   ` Michael Snyder
2002-05-03 12:36     ` Jason Merrill
2002-05-03 14:16       ` Daniel Jacobowitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox