]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libgo/testsuite: add benchmarks and examples to list
authorIan Lance Taylor <iant@golang.org>
Fri, 16 Jun 2023 17:45:15 +0000 (10:45 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 16 Jun 2023 19:29:04 +0000 (12:29 -0700)
In CL 384695 I simplified the code that built lists of benchmarks,
examples, and fuzz tests, and managed to break it. This CL corrects
the code to once again make the benchmarks available, and to run
the examples with output and the fuzz targets.

Doing this revealed a test failure in internal/fuzz on 32-bit x86:
a signalling NaN is turned into a quiet NaN on the 387 floating-point
stack that GCC uses by default. This CL skips the test.

Fixes golang/go#60826

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/503798

gcc/go/gofrontend/MERGE
libgo/go/internal/fuzz/encoding_test.go
libgo/testsuite/gotest

index 702257009d288977e66293a6d0b35516d644588f..1191a8d663d358f864e447a8584e599144dcef3f 100644 (file)
@@ -1,4 +1,4 @@
-737de90a63002d4872b19772a7116404ee5815b4
+a3a3c3a2d1bc6a8ca51b302d08c94ef27cdd8f0f
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 8e3800eb77f3ff205cc0ac67d6a6b6c04ccfc7ef..53fc5b8dc719d9e47a55b160cf27f6f8192dd3fa 100644 (file)
@@ -6,6 +6,7 @@ package fuzz
 
 import (
        "math"
+       "runtime"
        "strconv"
        "testing"
        "unicode"
@@ -330,6 +331,14 @@ func FuzzFloat64RoundTrip(f *testing.F) {
        f.Add(math.Float64bits(math.Inf(-1)))
 
        f.Fuzz(func(t *testing.T, u1 uint64) {
+               // The signaling NaN test fails on 32-bit x86 with gccgo,
+               // which uses the 387 floating-point stack by default.
+               // Converting a signaling NaN in and out of the stack
+               // changes the NaN to a quiet NaN.
+               if runtime.GOARCH == "386" && u1 == 0x7FF0000000000001 {
+                       t.Skip("skipping signalling NaN test on 386 with gccgo")
+               }
+
                x1 := math.Float64frombits(u1)
 
                b := marshalCorpusFile(x1)
index 0a0a7e14d7442084e36b3a623743754e1cef4cd0..33c98d804d6e6c3d4f39fd2e7ee60c82d7ed8a61 100755 (executable)
@@ -577,13 +577,13 @@ symtogo() {
 # Find Go benchmark/fuzz/example functions.
 # The argument is the function name prefix.
 findfuncs() {
-       pattern='$1([^a-z].*)?'
+       pattern="$1([^a-z].*)?"
        syms=$($NM -p -v _gotest_.o | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
        if $havex; then
            xsyms=$($NM -p -v $xofile | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
            syms="$syms $xsyms"
        fi
-        $(symtogo "$benchmarksyms")
+        symtogo "$syms"
 }
 
 # Takes an example name and puts any output into the file example.txt.
@@ -643,11 +643,13 @@ exampleoutput() {
        fi
        if $havex; then
            needxtest=false
-           if test -n "$testxsyms" -o -n "$benchmarkxsyms"; then
+           if test -n "$testxsyms"; then
+               needxtest=true
+           elif echo "$benchmarks" | grep '_test\.' >/dev/null; then
                needxtest=true
            else
                # Check whether any example has output.
-               for i in $(symtogo "$examplexsyms"); do
+               for i in $(echo "$examples" | grep '_test\.'); do
                    exampleoutput $i
                    if test -f example.txt; then
                        rm -f example.txt