aboutsummaryrefslogtreecommitdiff
path: root/gdb/gnu-v3-abi.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2002-02-02 00:04:46 +0000
committerDaniel Jacobowitz <drow@false.org>2002-02-02 00:04:46 +0000
commit76b79d6ec8ffbc873e6d9c05617b621843d5bc3e (patch)
tree0ff620ea895be8ebe043959b609c87fea0cb6c66 /gdb/gnu-v3-abi.c
parentc7d99d0b23bd18c9713e94217136909a9ebc4bc3 (diff)
downloadgdb-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/gnu-v3-abi.c')
-rw-r--r--gdb/gnu-v3-abi.c8
1 files changed, 7 insertions, 1 deletions
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;
}