Tue Apr 30 13:13:33 1991 Michael Tiemann (tiemann at cygint.cygnus.com)

* valprint.c (type_print_base): If the type being printed is a
	struct containing undefined types, print "<undefine type>"
	as the type instead of crashing.
	* values.c (value_headof): Get the vtable pointer taking
	TYPE_VPTR_BASETYPE into account.
	* symtab.c, symtab.h, dbxread.c: Fix various whitespace splotches.
This commit is contained in:
Michael Tiemann 1991-04-30 20:19:02 +00:00
parent 98c1b9e79b
commit aec4cb918e
6 changed files with 31 additions and 10 deletions

View file

@ -1,3 +1,12 @@
Tue Apr 30 13:13:33 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
* valprint.c (type_print_base): If the type being printed is a
struct containing undefined types, print "<undefine type>"
as the type instead of crashing.
* values.c (value_headof): Get the vtable pointer taking
TYPE_VPTR_BASETYPE into account.
* symtab.c, symtab.h, dbxread.c: Fix various whitespace splotches.
Mon Apr 29 13:22:51 1991 Jim Kingdon (kingdon at cygint.cygnus.com)
* Move BROKEN_LARGE_ALLOCA from tm-sun386.h to xm-sun386.h.

View file

@ -3309,7 +3309,7 @@ define_symbol (valu, string, desc, type)
} else {
SYMBOL_LINE(sym) = 0; /* unknown */
}
if (string[0] == CPLUS_MARKER)
{
/* Special GNU C++ names. */

View file

@ -1933,7 +1933,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line)
p = *argptr;
while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
q = operator_chars (*argptr, &q1);
copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
if (q1 - q)
{

View file

@ -759,7 +759,7 @@ int current_source_line;
/* The virtual function table is now an array of structures
which have the form { int16 offset, delta; void *pfn; }.
In normal virtual function tables, OFFSET is unused.
DELTA is the amount which is added to the apparent object's base
address in order to point to the actual object to which the

View file

@ -301,7 +301,7 @@ value_print (val, stream, format, pretty)
printf_filtered ("<value optimized out>");
return 0;
}
/* A "repeated" value really contains several values in a row.
They are made by the @ operator.
Print such values as if they were arrays. */
@ -1640,7 +1640,15 @@ type_print_base (type, stream, show, level)
fprintf_filtered (stream, "virtual ");
else if (TYPE_FN_FIELD_STATIC_P (f, j))
fprintf_filtered (stream, "static ");
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), "", stream, 0);
if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
{
/* Keep GDB from crashing here. */
fprintf (stream, "<undefined type> %s;\n",
TYPE_FN_FIELD_PHYSNAME (f, j));
break;
}
else
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), "", stream, 0);
if (TYPE_FLAGS (TYPE_FN_FIELD_TYPE (f, j)) & TYPE_FLAG_STUB)
{
/* Build something we can demangle. */

View file

@ -50,7 +50,6 @@ struct value_history_chunk
static struct value_history_chunk *value_history_chain;
static int value_history_count; /* Abs number of last entry stored */
/* List of all value objects currently allocated
(except for those released by calls to release_value)
@ -930,7 +929,13 @@ value_headof (arg, btype, dtype)
CORE_ADDR pc_for_sym;
char *demangled_name;
vtbl = value_ind (value_field (value_ind (arg), TYPE_VPTR_FIELDNO (dtype)));
btype = TYPE_VPTR_BASETYPE (dtype);
check_stub_type (btype);
if (btype != dtype)
vtbl = value_cast (lookup_pointer_type (btype), arg);
else
vtbl = arg;
vtbl = value_ind (value_field (value_ind (vtbl), TYPE_VPTR_FIELDNO (btype)));
/* Check that VTBL looks like it points to a virtual function table. */
i = find_pc_misc_function (VALUE_ADDRESS (vtbl));
@ -1021,7 +1026,6 @@ value_static_field (type, fieldname, fieldno)
if (fieldno < 0)
{
register struct type *t = type;
/* Look for static field. */
int i;
for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
@ -1084,7 +1088,7 @@ baseclass_addr (type, index, valaddr, valuep, errp)
if (errp)
*errp = 0;
if (BASETYPE_VIA_VIRTUAL (type, index))
{
/* Must hunt for the pointer to this virtual baseclass. */
@ -1255,7 +1259,7 @@ check_stub_method (type, i, j)
argtypes[argcount] = NULL; /* List terminator */
free (demangled_name);
type = lookup_method_type (type, TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), argtypes);
/* Free the stub type...it's no longer needed. */
free (TYPE_FN_FIELD_TYPE (f, j));