From d067a990c866d3fe08d3f6209cc5d78e91e5e56f Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sun, 21 Aug 2005 09:33:11 +0000 Subject: [PATCH] * valarith.c (value_equal, value_less): Avoid compiler bug on systems where `long double' values are returned in static storage. --- gdb/ChangeLog | 5 +++++ gdb/valarith.c | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4028cd802e..4665207a4d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2005-08-21 Mark Kettenis + + * 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 * stack.c: Reformat. Improve comments. Include "valprint.h". diff --git a/gdb/valarith.c b/gdb/valarith.c index 2e1471c3bc..c2a55e8cb3 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);