* ieee.c (ieee_define_named_type): When creating a tag for an

anonymous struct, copy the name into memory.
	(ieee_tag_type): Likewise.
	* debug.c (debug_write_type): Only check and set id field for an
	unnamed object.
	(debug_write_class_type): Likewise.
This commit is contained in:
Ian Lance Taylor
1996-01-24 21:10:55 +00:00
parent 397a4fa366
commit 76e45938c3
3 changed files with 24 additions and 7 deletions

View File

@ -1,5 +1,12 @@
Wed Jan 24 12:06:05 1996 Ian Lance Taylor <ian@cygnus.com> Wed Jan 24 12:06:05 1996 Ian Lance Taylor <ian@cygnus.com>
* ieee.c (ieee_define_named_type): When creating a tag for an
anonymous struct, copy the name into memory.
(ieee_tag_type): Likewise.
* debug.c (debug_write_type): Only check and set id field for an
unnamed object.
(debug_write_class_type): Likewise.
* ieee.c: Various changes to write out types for functions and * ieee.c: Various changes to write out types for functions and
references, and to not write out unnecessary function types. references, and to not write out unnecessary function types.

View File

@ -2576,7 +2576,7 @@ debug_write_type (info, fns, fhandle, type, name)
if (type->u.kclass != NULL) if (type->u.kclass != NULL)
{ {
if (info->class_mark == type->u.kclass->mark if (info->class_mark == type->u.kclass->mark
|| type->u.kclass->id > info->base_id) || (tag == NULL && type->u.kclass->id > info->base_id))
{ {
/* We are currently outputting this struct, or we have /* We are currently outputting this struct, or we have
already output it. I don't know if this can happen, already output it. I don't know if this can happen,
@ -2586,9 +2586,12 @@ debug_write_type (info, fns, fhandle, type, name)
type->kind); type->kind);
} }
type->u.kclass->mark = info->class_mark; type->u.kclass->mark = info->class_mark;
if (tag == NULL)
{
++info->class_id; ++info->class_id;
type->u.kclass->id = info->class_id; type->u.kclass->id = info->class_id;
} }
}
if (! (*fns->start_struct_type) (fhandle, tag, if (! (*fns->start_struct_type) (fhandle, tag,
(type->u.kclass != NULL (type->u.kclass != NULL
@ -2748,7 +2751,7 @@ debug_write_class_type (info, fns, fhandle, type, tag)
else else
{ {
if (info->class_mark == type->u.kclass->mark if (info->class_mark == type->u.kclass->mark
|| type->u.kclass->id > info->base_id) || (tag == NULL && type->u.kclass->id > info->base_id))
{ {
/* We are currently outputting this class, or we have /* We are currently outputting this class, or we have
already output it. This can happen when there are already output it. This can happen when there are
@ -2758,9 +2761,12 @@ debug_write_class_type (info, fns, fhandle, type, tag)
type->kind); type->kind);
} }
type->u.kclass->mark = info->class_mark; type->u.kclass->mark = info->class_mark;
if (tag == NULL)
{
++info->class_id; ++info->class_id;
id = info->class_id; type->u.kclass->id = info->class_id;
type->u.kclass->id = id; }
id = type->u.kclass->id;
vptrbase = type->u.kclass->vptrbase; vptrbase = type->u.kclass->vptrbase;
if (vptrbase != NULL && vptrbase != type) if (vptrbase != NULL && vptrbase != type)

View File

@ -4190,6 +4190,8 @@ ieee_define_named_type (info, name, tagp, id, size, unsignedp, ppbuf)
{ {
nt = (struct ieee_name_type *) xmalloc (sizeof *nt); nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
memset (nt, 0, sizeof *nt); memset (nt, 0, sizeof *nt);
if (tag != name)
tag = xstrdup (ab);
nt->name = tag; nt->name = tag;
nt->next = info->tags; nt->next = info->tags;
info->tags = nt; info->tags = nt;
@ -5701,6 +5703,8 @@ ieee_tag_type (p, name, id, kind)
nt = (struct ieee_name_type *) xmalloc (sizeof *nt); nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
memset (nt, 0, sizeof *nt); memset (nt, 0, sizeof *nt);
if (name == ab)
name = xstrdup (ab);
nt->name = name; nt->name = name;
nt->type.indx = info->type_indx; nt->type.indx = info->type_indx;
++info->type_indx; ++info->type_indx;