From: mec.gnu@mindspring.com (Michael Elizabeth Chastain)
To: dan@debian.org, gdb-patches@sources.redhat.com
Subject: [rfc/cp] take 2: method stubs asserts
Date: Mon, 05 Jan 2004 11:50:00 -0000 [thread overview]
Message-ID: <20040105115033.8376A4B35A@berman.michael-chastain.com> (raw)
Here's the slightly re-worked method stub patched.
Tested again on:
native i686-pc-linux-gnu, gcc 2.95.3 3.3.2 HEAD, dwarf-2 stabs+
full regression test
native hppa2.0w-hp-hpux11.11, HP aCC++ B3910B A.03.45
one little test by hand
Same analysis as before. Briefly, hpread.c does not set the
domain type on a method, but methods don't actually need domain
types unless they are used in pointer-to-member expressions,
which are not implemented with hp SOM anyways.
Is this the right idea?
If it is -- okay to apply this patch?
Michael C
2004-01-04 Michael Chastain <mec.gnu@mindpsring.com>
* valops.c (find_overload_match): Assert that methods are not
stubs. Do not assert that methods have domain types.
* eval.c (evaluate_subexp_standard): Assert basetype and
domain_type as needed.
Index: valops.c
===================================================================
RCS file: /cvs/src/src/gdb/valops.c,v
retrieving revision 1.119
diff -c -3 -p -r1.119 valops.c
*** valops.c 8 Nov 2003 00:13:03 -0000 1.119
--- valops.c 4 Jan 2004 23:05:43 -0000
***************
*** 1,6 ****
/* Perform non-arithmetic operations on values, for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
! 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of GDB.
--- 1,6 ----
/* Perform non-arithmetic operations on values, for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
! 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of GDB.
*************** find_overload_match (struct type **arg_t
*** 1939,1945 ****
/* If we are dealing with stub method types, they should have
been resolved by find_method_list via value_find_oload_method_list
above. */
! gdb_assert (TYPE_DOMAIN_TYPE (fns_ptr[0].type) != NULL);
}
else
{
--- 1939,1946 ----
/* If we are dealing with stub method types, they should have
been resolved by find_method_list via value_find_oload_method_list
above. */
! for (ix = 0; ix < num_fns; ix++)
! gdb_assert (fns_ptr[ix].is_stub == 0);
}
else
{
Index: eval.c
===================================================================
RCS file: /cvs/src/src/gdb/eval.c,v
retrieving revision 1.39
diff -c -3 -p -r1.39 eval.c
*** eval.c 23 Nov 2003 20:41:16 -0000 1.39
--- eval.c 4 Jan 2004 23:05:44 -0000
***************
*** 1,8 ****
/* Evaluate expressions for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
! 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
! Foundation, Inc.
This file is part of GDB.
--- 1,8 ----
/* Evaluate expressions for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
! 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
! Free Software Foundation, Inc.
This file is part of GDB.
***************
*** 36,41 ****
--- 36,42 ----
#include "objc-lang.h"
#include "block.h"
#include "parser-defs.h"
+ #include "gdb_assert.h"
/* Defined in symtab.c */
extern int hp_som_som_object_present;
*************** evaluate_subexp_standard (struct type *e
*** 996,1006 ****
if (METHOD_PTR_IS_VIRTUAL (fnptr))
{
int fnoffset = METHOD_PTR_TO_VOFFSET (fnptr);
! struct type *basetype;
struct type *domain_type =
! TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)));
int i, j;
! basetype = TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
if (domain_type != basetype)
arg2 = value_cast (lookup_pointer_type (domain_type), arg2);
basetype = TYPE_VPTR_BASETYPE (domain_type);
--- 997,1011 ----
if (METHOD_PTR_IS_VIRTUAL (fnptr))
{
int fnoffset = METHOD_PTR_TO_VOFFSET (fnptr);
! struct type *basetype =
! TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
struct type *domain_type =
! TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)));
int i, j;
!
! gdb_assert (basetype != NULL);
! gdb_assert (domain_type != NULL);
!
if (domain_type != basetype)
arg2 = value_cast (lookup_pointer_type (domain_type), arg2);
basetype = TYPE_VPTR_BASETYPE (domain_type);
next reply other threads:[~2004-01-05 11:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-05 11:50 Michael Elizabeth Chastain [this message]
2004-01-05 0:50 ` [rfc/cp] method stub assertions Michael Elizabeth Chastain
2004-01-05 1:56 ` Daniel Jacobowitz
2004-01-05 19:23 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040105115033.8376A4B35A@berman.michael-chastain.com \
--to=mec.gnu@mindspring.com \
--cc=dan@debian.org \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox