* ada-lang.c (ada_value_primitive_packed_val): Don't
authorTom Tromey <tromey@redhat.com>
Mon, 6 May 2013 19:46:15 +0000 (19:46 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 6 May 2013 19:46:15 +0000 (19:46 +0000)
call value_incref.
* value.c (set_value_parent): Incref the new parent and decref
the old parent.
(value_copy, value_primitive_field): Use set_value_parent.

gdb/ChangeLog
gdb/ada-lang.c
gdb/value.c

index f3a755d..e520f96 100644 (file)
@@ -1,5 +1,13 @@
 2013-05-06  Tom Tromey  <tromey@redhat.com>
 
+       * ada-lang.c (ada_value_primitive_packed_val): Don't
+       call value_incref.
+       * value.c (set_value_parent): Incref the new parent and decref
+       the old parent.
+       (value_copy, value_primitive_field): Use set_value_parent.
+
+2013-05-06  Tom Tromey  <tromey@redhat.com>
+
        * dwarf2loc.c (invalid_synthetic_pointer): Move earlier.
        (indirect_pieced_value): Call dwarf2_fetch_constant_bytes
        if needed.
index fdfc0b4..3510750 100644 (file)
@@ -2325,7 +2325,6 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
       /* Also set the parent value.  This is needed when trying to
         assign a new value (in inferior memory).  */
       set_value_parent (v, obj);
-      value_incref (obj);
     }
   else
     set_value_bitsize (v, bit_size);
index 90bc415..ee3c998 100644 (file)
@@ -811,7 +811,12 @@ value_parent (struct value *value)
 void
 set_value_parent (struct value *value, struct value *parent)
 {
+  struct value *old = value->parent;
+
   value->parent = parent;
+  if (parent != NULL)
+    value_incref (parent);
+  value_free (old);
 }
 
 gdb_byte *
@@ -1398,9 +1403,7 @@ value_copy (struct value *arg)
 
     }
   val->unavailable = VEC_copy (range_s, arg->unavailable);
-  val->parent = arg->parent;
-  if (val->parent)
-    value_incref (val->parent);
+  set_value_parent (val, arg->parent);
   if (VALUE_LVAL (val) == lval_computed)
     {
       const struct lval_funcs *funcs = val->location.computed.funcs;
@@ -2652,8 +2655,7 @@ value_primitive_field (struct value *arg1, int offset,
       v->offset = (value_embedded_offset (arg1)
                   + offset
                   + (bitpos - v->bitpos) / 8);
-      v->parent = arg1;
-      value_incref (v->parent);
+      set_value_parent (v, arg1);
       if (!value_lazy (arg1))
        value_fetch_lazy (v);
     }