Patch to fix crash on mingw and nil-typenames.

Joost van der Sluis
2011-10-12T08:35:33Z

Hi all,

This patch resolves crashes of gdb on mingw, because fprintf on mingw
does not substitute nil-string parameters.

2011-10-12 Joost van der Sluis <joost@cnoc.nl>

* gdbtypes.h Added TYPE_SAFE_NAME macro to get the name of a
type or "<unnamed type"> when there is no name assigned.
* gnu-v3-abi.c (gnuv3_rtti_type): Use TYPE_SAFE_NAME macro to
avoid a sigint when no name is assigned.

--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -1220,6 +1220,11 @@ extern void allocate_gnat_aux_type (struct type *);
|| TYPE_NFN_FIELDS (thistype) == 0) \
&& (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype)))

+/* A helper macro that returns the name of a type or "unnamed type" if the type
+ has no name. */
+#define TYPE_SAFE_NAME(type) \
+ (TYPE_NAME (type) ? TYPE_NAME (type) : _("<unnamed type>"))
+
/* A helper macro that returns the name of an error type. If the type
has a name, it is used; otherwise, a default is used. */
#define TYPE_ERROR_NAME(type) \
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -319,7 +319,7 @@ gnuv3_rtti_type (struct value *value,
|| strncmp (vtable_symbol_name, "vtable for ", 11))
{
warning (_("can't find linker symbol for virtual table for `%s' value"),
- TYPE_NAME (values_type));
+ TYPE_SAFE_NAME (values_type));
if (vtable_symbol_name)
warning (_(" found `%s' instead"), vtable_symbol_name);
return NULL;