diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/valops.c | 15 |
2 files changed, 17 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5da0133..2af78d1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Thu Mar 28 06:51:26 1996 Fred Fish <fnf@cygnus.com> + + * 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 e58f233..83d06bb 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 <errno.h> #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; |