* gdb.base/return2.exp (main): Use values to test float and double
authorJim Blandy <jimb@codesourcery.com>
Thu, 7 Jun 2001 03:42:41 +0000 (03:42 +0000)
committerJim Blandy <jimb@codesourcery.com>
Thu, 7 Jun 2001 03:42:41 +0000 (03:42 +0000)
returns that are not NaN's, to avoid being confused by IEEE
comparison rules.

gdb/testsuite/gdb.base/return2.c

index cddbb974cd6763d284d0360cd5fb455d4b41f4d0..58d85eca11356725afb25ab8ca33cb6787e464b3 100644 (file)
@@ -84,8 +84,27 @@ int main (int argc, char **argv)
   int_resultval       = int_func ();           /* short_checkpoint */
   long_resultval      = long_func ();          /* int_checkpoint */
   long_long_resultval = long_long_func ();     /* long_checkpoint */
-  float_resultval     = float_func ();         /* long_long_checkpoint */
-  double_resultval    = double_func ();                /* float_checkpoint */
+
+  /* On machines using IEEE floating point, the test pattern of all
+     1-bits established above turns out to be a floating-point NaN
+     ("Not a Number").  According to the IEEE rules, NaN's aren't even
+     equal to themselves.  This can lead to stupid conversations with
+     GDB like:
+
+       (gdb) p testval.float_testval == testval.float_testval
+       $7 = 0
+       (gdb)
+
+     This is the correct answer, but it's not the sort of thing
+     return2.exp wants to see.  So to make things work the way they
+     ought, we'll set aside the `union' cleverness and initialize the
+     test values explicitly here.  These values have interesting bits
+     throughout the value, so we'll still detect truncated values.  */
+
+  testval.float_testval = 2.7182818284590452354;/* long_long_checkpoint */
+  float_resultval     = float_func ();         
+  testval.double_testval = 3.14159265358979323846; /* float_checkpoint */
+  double_resultval    = double_func ();                
   main_test = 1;                               /* double_checkpoint */
   return 0;
 }