aboutsummaryrefslogtreecommitdiff
path: root/gdb/valops.c
diff options
context:
space:
mode:
authorFred Fish <fnf@specifix.com>1996-03-28 15:03:16 +0000
committerFred Fish <fnf@specifix.com>1996-03-28 15:03:16 +0000
commit75225aa25d9d13d7cf34c023520dbb2cd41ea700 (patch)
tree14554f9dd7584f5d3a5339970db963f6c7be7a91 /gdb/valops.c
parentd0757082eb9320d85a668f38eade30ee6d0e2f60 (diff)
downloadgdb-75225aa25d9d13d7cf34c023520dbb2cd41ea700.zip
gdb-75225aa25d9d13d7cf34c023520dbb2cd41ea700.tar.gz
gdb-75225aa25d9d13d7cf34c023520dbb2cd41ea700.tar.bz2
* 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.
Diffstat (limited to 'gdb/valops.c')
-rw-r--r--gdb/valops.c15
1 files changed, 11 insertions, 4 deletions
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;