From 75225aa25d9d13d7cf34c023520dbb2cd41ea700 Mon Sep 17 00:00:00 2001 From: Fred Fish Date: Thu, 28 Mar 1996 15:03:16 +0000 Subject: [PATCH] * valops.c (value_assign): Make copy of internal variable value before returning it as a new value, since it is owned by the internal variable and will be freed along with it. --- gdb/ChangeLog | 6 ++++++ gdb/valops.c | 15 +++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5da0133880..2af78d1b7a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Thu Mar 28 06:51:26 1996 Fred Fish + + * valops.c (value_assign): Make copy of internal variable value + before returning it as a new value, since it is owned by the + internal variable and will be freed along with it. + Wed Mar 27 08:36:17 1996 Jeffrey A Law (law@cygnus.com) * From Peter Schauer. diff --git a/gdb/valops.c b/gdb/valops.c index e58f23378f..83d06bbd83 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -32,6 +32,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "gdb_string.h" +/* Default to coercing float to double in function calls only when there is + no prototype. Otherwise on targets where the debug information is incorrect + for either the prototype or non-prototype case, we can force it by defining + COERCE_FLOAT_TO_DOUBLE in the target configuration file. */ + +#ifndef COERCE_FLOAT_TO_DOUBLE +#define COERCE_FLOAT_TO_DOUBLE (param_type == NULL) +#endif + /* Local functions. */ static int typecmp PARAMS ((int staticp, struct type *t1[], value_ptr t2[])); @@ -440,7 +449,7 @@ value_assign (toval, fromval) { case lval_internalvar: set_internalvar (VALUE_INTERNALVAR (toval), fromval); - return VALUE_INTERNALVAR (toval)->value; + return value_copy (VALUE_INTERNALVAR (toval)->value); case lval_internalvar_component: set_internalvar_component (VALUE_INTERNALVAR (toval), @@ -889,9 +898,7 @@ value_arg_coerce (arg, param_type) break; case TYPE_CODE_FLT: /* coerce float to double, unless the function prototype specifies float */ -#if 0 - if (param_type == 0) -#endif + if (COERCE_FLOAT_TO_DOUBLE) { if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_double)) type = builtin_type_double;