math: adjust compilation flags, use them when testing
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 1 Feb 2018 21:05:20 +0000 (21:05 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 1 Feb 2018 21:05:20 +0000 (21:05 +0000)
    We were using special compilation flags for the math package, but we
    weren't using them when testing.  That meant that our tests were not
    checking the real code we were providing.  Fix that.

    Fixing that revealed that we were not using a good set of flags, or at
    least were not using flags that let the tests pass.  Adjust the flags
    to stop using -funsafe-math-optimizations on x86.  Instead always use
    -ffp-contract=off -fno-math-errno -fno-trapping-math for all targets.

    Fixes golang/go#23647

    Reviewed-on: https://go-review.googlesource.com/91355

From-SVN: r257312

libgo/Makefile.am
libgo/Makefile.in
libgo/configure
libgo/configure.ac
libgo/go/math/all_test.go

index 88be5dbb00a7da1cf659b0267377dcf696c7693c..531f8f04d1772644629e9584b953ea8ffa38da44 100644 (file)
@@ -1138,6 +1138,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package)))
 # Pass -ffp-contract=off, or 386-specific options, when building the
 # math package.  MATH_FLAG is defined in configure.ac.
 math_lo_GOCFLAGS = $(MATH_FLAG)
+math_check_GOCFLAGS = $(MATH_FLAG)
 
 # Add the generated file runtime_sysinfo.go to the runtime package.
 extra_go_files_runtime = runtime_sysinfo.go sigtab.go
index 471a047f831f2481340dcca1c93acf16589c2b39..fbca83ec3af88db67443ca10f78fba2ec72cb07c 100644 (file)
@@ -1175,6 +1175,7 @@ CHECK_DEPS = $(toolexeclibgo_DATA) $(toolexeclibgoarchive_DATA) \
 # Pass -ffp-contract=off, or 386-specific options, when building the
 # math package.  MATH_FLAG is defined in configure.ac.
 math_lo_GOCFLAGS = $(MATH_FLAG)
+math_check_GOCFLAGS = $(MATH_FLAG)
 
 # Add the generated file runtime_sysinfo.go to the runtime package.
 extra_go_files_runtime = runtime_sysinfo.go sigtab.go
index d0550c37c55a9bd95b3c96e8092566c1f9237137..aba4dc396fc0b720cc714003fbe241542d1d4ccd 100755 (executable)
 $as_echo "$libgo_cv_c_fancymath" >&6; }
 MATH_FLAG=
 if test "$libgo_cv_c_fancymath" = yes; then
-  MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations -fno-math-errno"
-else
-  MATH_FLAG="-ffp-contract=off"
+  MATH_FLAG="-mfancy-math-387"
 fi
+MATH_FLAG="${MATH_FLAG} -ffp-contract=off -fno-math-errno -fno-trapping-math"
 
 
 CFLAGS_hold=$CFLAGS
index c497e78c31a3f7558ca895dbecf3b4ce189fa8dc..1264a1d252401c42aaa7a2c7f4f29670cff1b714 100644 (file)
@@ -649,8 +649,7 @@ fi
 AC_SUBST(STRINGOPS_FLAG)
 
 dnl For x86 we want to compile the math library with -mfancy-math-387
-dnl -funsafe-math-optimizations so that we can use the builtin
-dnl instructions directly.
+dnl so that we can use the builtin instructions directly.
 AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
 [libgo_cv_c_fancymath],
 [CFLAGS_hold=$CFLAGS
@@ -661,10 +660,9 @@ AC_COMPILE_IFELSE([int i;],
 CFLAGS=$CFLAGS_hold])
 MATH_FLAG=
 if test "$libgo_cv_c_fancymath" = yes; then
-  MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations -fno-math-errno"
-else
-  MATH_FLAG="-ffp-contract=off"
+  MATH_FLAG="-mfancy-math-387"
 fi
+MATH_FLAG="${MATH_FLAG} -ffp-contract=off -fno-math-errno -fno-trapping-math"
 AC_SUBST(MATH_FLAG)
 
 CFLAGS_hold=$CFLAGS
index 6682395aa0a78690c5b272af93fff7570cee9601..98437b08bd851d607df3bd4d59b81573f8934a40 100644 (file)
@@ -128,7 +128,7 @@ var cbrt = []float64{
 var ceil = []float64{
        5.0000000000000000e+00,
        8.0000000000000000e+00,
-       0.0000000000000000e+00,
+       Copysign(0, -1),
        -5.0000000000000000e+00,
        1.0000000000000000e+01,
        3.0000000000000000e+00,
@@ -644,7 +644,7 @@ var tanh = []float64{
 var trunc = []float64{
        4.0000000000000000e+00,
        7.0000000000000000e+00,
-       -0.0000000000000000e+00,
+       Copysign(0, -1),
        -5.0000000000000000e+00,
        9.0000000000000000e+00,
        2.0000000000000000e+00,
@@ -2134,7 +2134,7 @@ func TestCbrt(t *testing.T) {
 
 func TestCeil(t *testing.T) {
        for i := 0; i < len(vf); i++ {
-               if f := Ceil(vf[i]); ceil[i] != f {
+               if f := Ceil(vf[i]); !alike(ceil[i], f) {
                        t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
                }
        }
@@ -2361,7 +2361,7 @@ func TestDim(t *testing.T) {
 
 func TestFloor(t *testing.T) {
        for i := 0; i < len(vf); i++ {
-               if f := Floor(vf[i]); floor[i] != f {
+               if f := Floor(vf[i]); !alike(floor[i], f) {
                        t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
                }
        }
@@ -2884,7 +2884,7 @@ func TestTanh(t *testing.T) {
 
 func TestTrunc(t *testing.T) {
        for i := 0; i < len(vf); i++ {
-               if f := Trunc(vf[i]); trunc[i] != f {
+               if f := Trunc(vf[i]); !alike(trunc[i], f) {
                        t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
                }
        }