aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2018-02-01 21:05:20 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2018-02-01 21:05:20 +0000
commitff60d2b1cee0895ce85d48595665e4e9201fe026 (patch)
tree22f2408010d680c87c037ebf561a741ac3f31c12 /libgo
parentd835b8fe99c5db9fad34bc01a6dcb3fb98e5adc8 (diff)
math: adjust compilation flags, use them when testing
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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257312 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo')
-rw-r--r--libgo/Makefile.am1
-rw-r--r--libgo/Makefile.in1
-rwxr-xr-xlibgo/configure5
-rw-r--r--libgo/configure.ac8
-rw-r--r--libgo/go/math/all_test.go10
5 files changed, 12 insertions, 13 deletions
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 88be5dbb00a..531f8f04d17 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -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
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 471a047f831..fbca83ec3af 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -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
diff --git a/libgo/configure b/libgo/configure
index d0550c37c55..aba4dc396fc 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -15076,10 +15076,9 @@ fi
$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
diff --git a/libgo/configure.ac b/libgo/configure.ac
index c497e78c31a..1264a1d2524 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -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
diff --git a/libgo/go/math/all_test.go b/libgo/go/math/all_test.go
index 6682395aa0a..98437b08bd8 100644
--- a/libgo/go/math/all_test.go
+++ b/libgo/go/math/all_test.go
@@ -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])
}
}