Removes some uses of deprecated_set_value_type * ada-lang.c (ada_coerce_to_simple_array_type): Create a new zero value of the correct type instead of changing type. * c-valprint.c (c_value_print): Call copy_value_and_change_type. * printcmd.c (printf_command): Create a zero value of the correct type and copy the contents of the old value into it. * valops.c (value_cast_pointers, value_cast, value_assign, value_addr): Call value_value_copy_and_change_type instead of copying the value and then changing the type. * value.c (value_copy_and_change_type): Define. * value.h (value_copy_and_change_type): Declare. Index: ada-lang.c =================================================================== RCS file: /cvs/src/src/gdb/ada-lang.c,v retrieving revision 1.151 diff -u -p -r1.151 ada-lang.c --- ada-lang.c 21 Jul 2008 16:47:10 -0000 1.151 +++ ada-lang.c 26 Jul 2008 22:16:29 -0000 @@ -1767,9 +1767,8 @@ struct type * ada_coerce_to_simple_array_type (struct type *type) { struct value *mark = value_mark (); - struct value *dummy = value_from_longest (builtin_type_long, 0); + struct value *dummy = value_zero (type, not_lval); struct type *result; - deprecated_set_value_type (dummy, type); result = ada_type_of_array (dummy, 0); value_free_to_mark (mark); return result; Index: c-valprint.c =================================================================== RCS file: /cvs/src/src/gdb/c-valprint.c,v retrieving revision 1.50 diff -u -p -r1.50 c-valprint.c --- c-valprint.c 19 May 2008 15:50:09 -0000 1.50 +++ c-valprint.c 26 Jul 2008 22:16:29 -0000 @@ -562,10 +562,7 @@ c_value_print (struct value *val, struct /* Copy value, change to pointer, so we don't get an * error about a non-pointer type in value_rtti_target_type */ - struct value *temparg; - temparg=value_copy(val); - deprecated_set_value_type (temparg, lookup_pointer_type (TYPE_TARGET_TYPE(type))); - val=temparg; + val=value_addr (val); } /* Pointer to class, check real type of object */ fprintf_filtered (stream, "("); Index: printcmd.c =================================================================== RCS file: /cvs/src/src/gdb/printcmd.c,v retrieving revision 1.127 diff -u -p -r1.127 printcmd.c --- printcmd.c 6 Jun 2008 20:58:08 -0000 1.127 +++ printcmd.c 26 Jul 2008 22:16:30 -0000 @@ -2005,9 +2005,21 @@ printf_command (char *arg, int from_tty) { struct type *type = value_type (val_args[nargs]); if (TYPE_LENGTH (type) == sizeof (float)) - deprecated_set_value_type (val_args[nargs], builtin_type_float); + { + struct value *temp = value_zero (builtin_type_float, not_lval); + memcpy (value_contents_writeable (temp), + value_contents (val_args[nargs]), + TYPE_LENGTH (builtin_type_float)); + val_args[nargs] = temp; + } if (TYPE_LENGTH (type) == sizeof (double)) - deprecated_set_value_type (val_args[nargs], builtin_type_double); + { + struct value *temp = value_zero (builtin_type_double, not_lval); + memcpy (value_contents_writeable (temp), + value_contents (val_args[nargs]), + TYPE_LENGTH (builtin_type_double)); + val_args[nargs] = temp; + } } nargs++; s = s1; Index: valops.c =================================================================== RCS file: /cvs/src/src/gdb/valops.c,v retrieving revision 1.192 diff -u -p -r1.192 valops.c --- valops.c 15 Jul 2008 22:13:42 -0000 1.192 +++ valops.c 26 Jul 2008 22:16:32 -0000 @@ -281,8 +281,7 @@ value_cast_pointers (struct type *type, } /* No superclass found, just change the pointer type. */ - arg2 = value_copy (arg2); - deprecated_set_value_type (arg2, type); + arg2 = value_copy_and_change_type (arg2, type); arg2 = value_change_enclosing_type (arg2, type); set_value_pointed_to_offset (arg2, 0); /* pai: chk_val */ return arg2; @@ -480,8 +479,7 @@ value_cast (struct type *type, struct va if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR) return value_cast_pointers (type, arg2); - arg2 = value_copy (arg2); - deprecated_set_value_type (arg2, type); + arg2 = value_copy_and_change_type (arg2, type); arg2 = value_change_enclosing_type (arg2, type); set_value_pointed_to_offset (arg2, 0); /* pai: chk_val */ return arg2; @@ -926,10 +924,9 @@ value_assign (struct value *toval, struc fromval = value_from_longest (type, fieldval); } - val = value_copy (toval); + val = value_copy_and_change_type (toval, type); memcpy (value_contents_raw (val), value_contents (fromval), TYPE_LENGTH (type)); - deprecated_set_value_type (val, type); val = value_change_enclosing_type (val, value_enclosing_type (fromval)); set_value_embedded_offset (val, value_embedded_offset (fromval)); @@ -1106,8 +1103,8 @@ value_addr (struct value *arg1) keep the same location information, which is efficient, and allows &(&X) to get the location containing the reference. */ arg2 = value_copy (arg1); - deprecated_set_value_type (arg2, - lookup_pointer_type (TYPE_TARGET_TYPE (type))); + arg2 = value_copy_and_change_type (arg1, + lookup_pointer_type (TYPE_TARGET_TYPE (type))); return arg2; } if (TYPE_CODE (type) == TYPE_CODE_FUNC) Index: value.c =================================================================== RCS file: /cvs/src/src/gdb/value.c,v retrieving revision 1.64 diff -u -p -r1.64 value.c --- value.c 11 Jun 2008 19:59:09 -0000 1.64 +++ value.c 26 Jul 2008 22:16:33 -0000 @@ -276,6 +276,15 @@ deprecated_set_value_type (struct value value->type = type; } +struct value * +value_copy_and_change_type (struct value *arg, struct type *type) +{ + struct value *val = value_copy (arg); + val->type = type; + + return val; +} + int value_offset (struct value *value) { Index: value.h =================================================================== RCS file: /cvs/src/src/gdb/value.h,v retrieving revision 1.115 diff -u -p -r1.115 value.h --- value.h 6 Jun 2008 20:58:08 -0000 1.115 +++ value.h 26 Jul 2008 22:16:34 -0000 @@ -57,6 +57,12 @@ extern struct type *value_type (struct v extern void deprecated_set_value_type (struct value *value, struct type *type); +/* Copy ARG to new value. The new value is exactly the same, except + for its type, which is set to TYPE. */ + +extern struct value *value_copy_and_change_type (struct value *arg, + struct type *type); + /* Only used for bitfields; number of bits contained in them. */ extern int value_bitsize (struct value *);