summaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2005-08-21 09:33:11 +0000
committerMark Kettenis <kettenis@gnu.org>2005-08-21 09:33:11 +0000
commit266920782a9673153db153a5144927eed662a1a8 (patch)
tree4adca9ea97e02fbc99803577862a6efb62041935 /gdb/valarith.c
parent971fa2c043f4ce2782c9607bc0d0fa5dafe7e89a (diff)
downloadgdb-266920782a9673153db153a5144927eed662a1a8.tar.gz
* valarith.c (value_equal, value_less): Avoid compiler bug on
systems where `long double' values are returned in static storage.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r--gdb/valarith.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index 2e1471c3bc4..c2a55e8cb38 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -1,8 +1,8 @@
/* Perform arithmetic and other operations on values, for GDB.
Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
- Software Foundation, Inc.
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
This file is part of GDB.
@@ -1248,7 +1248,12 @@ value_equal (struct value *arg1, struct value *arg2)
BINOP_EQUAL)));
else if ((code1 == TYPE_CODE_FLT || is_int1)
&& (code2 == TYPE_CODE_FLT || is_int2))
- return value_as_double (arg1) == value_as_double (arg2);
+ {
+ /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
+ `long double' values are returned in static storage (m68k). */
+ DOUBLEST d = value_as_double (arg1);
+ return d == value_as_double (arg2);
+ }
/* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
is bigger. */
@@ -1307,7 +1312,12 @@ value_less (struct value *arg1, struct value *arg2)
BINOP_LESS)));
else if ((code1 == TYPE_CODE_FLT || is_int1)
&& (code2 == TYPE_CODE_FLT || is_int2))
- return value_as_double (arg1) < value_as_double (arg2);
+ {
+ /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
+ `long double' values are returned in static storage (m68k). */
+ DOUBLEST d = value_as_double (arg1);
+ return d < value_as_double (arg2);
+ }
else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
return value_as_address (arg1) < value_as_address (arg2);