This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Go patch committed: Fix negative float zero constant


This patch to the Go frontend corrects the handling of negative zero
when using untyped constants.  Go's untyped constants are ideal floating
point numbers, and don't have negative zero or infinity or NaN.  The Go
frontend was incorrectly representing the negative of zero as a negative
zero, since it just uses the MPFR library.  This was detectable via the
standard function math.Float64bits.  This patch corrects the problem.  I
added a test case to the master Go testsuite, which will be copied into
the gccgo testsuite in due course.  Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline and 4.7 branch.

Ian

diff -r afcf18f60884 go/expressions.cc
--- a/go/expressions.cc	Mon Apr 23 09:59:25 2012 -0700
+++ b/go/expressions.cc	Mon Apr 23 13:42:46 2012 -0700
@@ -13620,7 +13620,13 @@
   this->clear();
   this->classification_ = NC_FLOAT;
   this->type_ = type;
-  mpfr_init_set(this->u_.float_val, val, GMP_RNDN);
+  // Numeric constants do not have negative zero values, so remove
+  // them here.  They also don't have infinity or NaN values, but we
+  // should never see them here.
+  if (mpfr_zero_p(val))
+    mpfr_init_set_ui(this->u_.float_val, 0, GMP_RNDN);
+  else
+    mpfr_init_set(this->u_.float_val, val, GMP_RNDN);
 }
 
 // Set to a complex value.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]