diff options
author | Daniel Jacobowitz <drow@false.org> | 2002-02-02 00:04:46 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2002-02-02 00:04:46 +0000 |
commit | 76b79d6ec8ffbc873e6d9c05617b621843d5bc3e (patch) | |
tree | 0ff620ea895be8ebe043959b609c87fea0cb6c66 /gdb | |
parent | c7d99d0b23bd18c9713e94217136909a9ebc4bc3 (diff) | |
download | gdb-76b79d6ec8ffbc873e6d9c05617b621843d5bc3e.zip gdb-76b79d6ec8ffbc873e6d9c05617b621843d5bc3e.tar.gz gdb-76b79d6ec8ffbc873e6d9c05617b621843d5bc3e.tar.bz2 |
2002-02-01 Daniel Jacobowitz <drow@mvista.com>
* gnu-v3-abi.c (gnuv3_virtual_fn_field): Update comments.
Update ``this'' pointer when calling virtual functions.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gnu-v3-abi.c | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 24b8c75..1c6544c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2002-02-01 Daniel Jacobowitz <drow@mvista.com> + + * gnu-v3-abi.c (gnuv3_virtual_fn_field): Update comments. + Update ``this'' pointer when calling virtual functions. + 2002-02-01 Michael Snyder <msnyder@redhat.com> * breakpoint.c (create_temp_exception_breakpoint): Delete. diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c index a4c7960..ae2104d 100644 --- a/gdb/gnu-v3-abi.c +++ b/gdb/gnu-v3-abi.c @@ -318,7 +318,9 @@ gnuv3_virtual_fn_field (struct value **value_p, /* Now value is an object of the appropriate base type. Fetch its virtual table. */ /* It might be possible to do this cast at the same time as the above. - Does multiple inheritance affect this? */ + Does multiple inheritance affect this? + Can this even trigger, or is TYPE_VPTR_BASETYPE idempotent? + */ if (TYPE_VPTR_BASETYPE (vfn_base) != vfn_base) value = value_cast (TYPE_VPTR_BASETYPE (vfn_base), value); vtable_address @@ -337,6 +339,10 @@ gnuv3_virtual_fn_field (struct value **value_p, vfn = value_cast (lookup_pointer_type (TYPE_FN_FIELD_TYPE (f, j)), vfn); + /* Is (type)value always numerically the same as (vfn_base)value? + If so we can spare this cast and use one of the ones above. */ + *value_p = value_addr (value_cast (type, *value_p)); + return vfn; } |