* valops.c (value_cast): Simplify and correct logic for doing a
authorJim Blandy <jimb@codesourcery.com>
Wed, 21 Aug 2002 17:24:31 +0000 (17:24 +0000)
committerJim Blandy <jimb@codesourcery.com>
Wed, 21 Aug 2002 17:24:31 +0000 (17:24 +0000)
static cast from a pointer to a base class to a pointer to a
derived class.

gdb/ChangeLog
gdb/valops.c

index c072c1f36196ff57250fb6c90991036171278dab..c06a825e11d2712b0aa744827b2e428e27966a45 100644 (file)
@@ -1,3 +1,9 @@
+2002-08-21  Jim Blandy  <jimb@redhat.com>
+
+       * 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.
+
 2002-08-21  Andrew Cagney  <ac131313@redhat.com>
 
        * infcmd.c (default_print_registers_info): Replace
index 569c85b62cd28b5a21505ae00b3f6542caa9a5c6..1eeedd32cf7ad755766277dbc82371bf9300ddcb 100644 (file)
@@ -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);
                    }
                }
            }