This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[David Carlton <carlton@math.Stanford.EDU>] Re: [RFA] dwarf2read.c: set TYPE_DOMAIN_TYPE correctly for methods


Here's a ping for a patch that I'd like to get in before the 5.3
branch is cut; I'm sending the ping now even though I originally sent
the patch out just under a week ago because I'll be out of the office
through next Monday.  (I'm not this pushy normally, honest.)

The reason why I want to get this into the 5.3 branch is because it
fixes a seg fault and seg faults make me unduly nervous. :-)

David Carlton
carlton@math.stanford.edu

--- Begin Message ---
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)
 	    {

--- End Message ---

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]