Re: [RFA] dwarf2read.c: set TYPE_DOMAIN_TYPE correctly for methods

David Carlton
2002-08-22T21:24:19Z

In article <3D655311.6030603@ges.redhat.com>, Andrew Cagney <ac131313@ges.redhat.com> writes:

> The place to put comments explaining changes is in the source
> code.
...
> The ChangeLog need only state what changed, not why.

Whoops, sorry about that. How about this patch?

By the way, am I correct in thinking that the ChangeLog is supposed
to mention the PR number? I noticed that GNATS picked up some of my
earlier changes, and I'm assuming it noticed the PR number from the
log message.

David Carlton
carlton@math.stanford.edu

2002-08-22 David Carlton <carlton@math.stanford.edu>

* dwarf2read.c (dwarf2_add_member_fn): Add the 'type'
argument (PR gdb/653). Update call to smash_to_method_type.
(read_structure_scope): Update call to dwarf2_add_member_fn.

Index: dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.65
diff -u -p -r1.65 dwarf2read.c
--- dwarf2read.c 20 Aug 2002 18:45:30 -0000 1.65
+++ dwarf2read.c 22 Aug 2002 21:22:51 -0000
@@ -803,7 +803,8 @@ static void dwarf2_attach_fields_to_type
struct type *, struct objfile *);

static void dwarf2_add_member_fn (struct field_info *,
- struct die_info *, struct objfile *objfile,
+ struct die_info *, struct type *,
+ struct objfile *objfile,
const struct comp_unit_head *);

static void dwarf2_attach_fn_fields_to_type (struct field_info *,
@@ -2259,7 +2260,7 @@ dwarf2_attach_fields_to_type (struct fie

static void
dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
- struct objfile *objfile,
+ struct type *type, struct objfile *objfile,
const struct comp_unit_head *cu_header)
{
struct attribute *attr;
@@ -2327,7 +2328,15 @@ dwarf2_add_member_fn (struct field_info
struct type *return_type = TYPE_TARGET_TYPE (die->type);
int nparams = TYPE_NFIELDS (die->type);

- smash_to_method_type (fnp->type, die->type,
+ /* NOTE: carlton/2002-08-22: Previously, the second argument to
+ smash_to_method_type was die->type rather than type, and the
+ type argument to dwarf2_add_member_fn didn't exst. This is
+ incorrect: the second argument to smash_to_method_type should
+ be the type of the class that this is a method of, whereas
+ die->type is the type of the method itself. So we need to
+ pass that type in from read_structure_scope explicitly. See
+ PR gdb/653. */
+ smash_to_method_type (fnp->type, type,
TYPE_TARGET_TYPE (die->type),
TYPE_FIELDS (die->type),
TYPE_NFIELDS (die->type),
@@ -2516,7 +2525,7 @@ read_structure_scope (struct die_info *d
{
/* C++ member function. */
process_die (child_die, objfile, cu_header);
- dwarf2_add_member_fn (&fi, child_die, objfile, cu_header);
+ dwarf2_add_member_fn (&fi, child_die, type, objfile, cu_header);
}
else if (child_die->tag == DW_TAG_inheritance)
{