]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* 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 4028cd802efbd3fea6013b81a91947f7adffe523..4665207a4db098657c968fb520e5516323c95c2a 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 2e1471c3bc464a983f4db2f59f321393c962b7d7..c2a55e8cb38afa05a0f7e36b1b1a275f54a6a170 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);