aboutsummaryrefslogtreecommitdiff
path: root/gdb/valops.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2002-08-21 17:24:31 +0000
committerJim Blandy <jimb@codesourcery.com>2002-08-21 17:24:31 +0000
commitd174216d52ba742b085f7b8184f485d9ceee020c (patch)
tree9a102571167db73712a81f5201d210c1abd00458 /gdb/valops.c
parent0ab7a791257080198a22f27a12563758f1e78c96 (diff)
downloadbinutils-d174216d52ba742b085f7b8184f485d9ceee020c.zip
binutils-d174216d52ba742b085f7b8184f485d9ceee020c.tar.gz
binutils-d174216d52ba742b085f7b8184f485d9ceee020c.tar.bz2
* valops.c (value_cast): Simplify and correct logic for doing a
static cast from a pointer to a base class to a pointer to a derived class.
Diffstat (limited to 'gdb/valops.c')
-rw-r--r--gdb/valops.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/gdb/valops.c b/gdb/valops.c
index 569c85b..1eeedd3 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -361,18 +361,11 @@ value_cast (struct type *type, struct value *arg2)
value_zero (t1, not_lval), 0, t1, 1);
if (v)
{
- struct value *v2 = value_ind (arg2);
- VALUE_ADDRESS (v2) -= VALUE_ADDRESS (v)
- + VALUE_OFFSET (v);
-
- /* JYG: adjust the new pointer value and
- embedded offset. */
- v2->aligner.contents[0] -= VALUE_EMBEDDED_OFFSET (v);
- VALUE_EMBEDDED_OFFSET (v2) = 0;
-
- v2 = value_addr (v2);
- VALUE_TYPE (v2) = type;
- return v2;
+ CORE_ADDR addr2 = value_as_address (arg2);
+ addr2 -= (VALUE_ADDRESS (v)
+ + VALUE_OFFSET (v)
+ + VALUE_EMBEDDED_OFFSET (v));
+ return value_from_pointer (type, addr2);
}
}
}