OSDN Git Service

* valarith.c (value_equal, value_less): Avoid compiler bug on
authorMark Kettenis <kettenis@gnu.org>
Sun, 21 Aug 2005 09:33:11 +0000 (09:33 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sun, 21 Aug 2005 09:33:11 +0000 (09:33 +0000)
systems where `long double' values are returned in static storage.

gdb/ChangeLog
gdb/valarith.c

index 4028cd8..4665207 100644 (file)
@@ -1,3 +1,8 @@
+2005-08-21  Mark Kettenis  <kettenis@gnu.org>
+
+       * valarith.c (value_equal, value_less): Avoid compiler bug on
+       systems where `long double' values are returned in static storage.
+
 2005-08-18  Mark Kettenis  <kettenis@gnu.org>
 
        * stack.c: Reformat.  Improve comments.  Include "valprint.h".
index 2e1471c..c2a55e8 100644 (file)
@@ -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);