libgo patch committed: Add benchmarks and examples to test list
Checks
Commit Message
In https://go.dev/cl/384695
(https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590289.html)
I simplified the code that built lists of benchmarks, examples, and
fuzz tests, and managed to break it. This patch 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.
This fixes https://go.dev/issue/60826.
Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed
to mainline.
Ian
bc6bd0d608da1609c1caeb04ab795a83720add55
@@ -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.
@@ -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)
@@ -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