From d694576e174d95b7f6066d924715691c55824f30 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 11 Sep 2019 12:44:12 +0000 Subject: [PATCH] gotest: force test package to be imported first When compiling the x_test package, force the test package to be imported first. That ensures that we will see the types defined in the test package before the types defined in the non-test version of the package. This matters if the types differ in some way, such as by adding a new method. This avoids a failure in internal/poll on Solaris, in which the test package adds a method to a type (FD.EOFError). I think it was Solaris- specific because files are sorted in a different order by default. The go tool handles this kind of thing correctly, by rebuilding dependent packages. This is just a hack sufficient to run the libgo testsuite without using the go tool. Fixes https://gcc.gnu.org/PR91712 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194637 From-SVN: r275648 --- gcc/go/gofrontend/MERGE | 2 +- libgo/testsuite/gotest | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 61845bc83c2..895aa6f3fcc 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -bf4832d604e7522dee78fca76de220b62a131d54 +1f4ce28409a2d9d4045b1085de55c46de8759d1c The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest index 60bead5e7d6..9d46916d69a 100755 --- a/libgo/testsuite/gotest +++ b/libgo/testsuite/gotest @@ -419,10 +419,12 @@ esac # Split $gofiles into external gofiles (those in *_test packages) # and internal ones (those in the main package). xgofiles= +xpackage= for f in $gofiles; do package=`grep '^package[ ]' $f | sed 1q` case "$package" in *_test) + xpackage=`echo $package | sed -e 's/package[ ]//' -e 's/[ ]*$//'` xgofiles="$xgofiles $f" ;; *) @@ -471,10 +473,17 @@ $GC -g $pkgpatharg $prefixarg -c -I . -fno-toplevel-reorder -o _gotest_.o $gofil if $havex; then mkdir -p `dirname $package` cp _gotest_.o `dirname $package`/lib`basename $package`.a + + # Force the test version of the package to be imported first, + # so that it's type definitions will be used, in case any new + # methods appear in export_test.go files. + echo "package $xpackage" > _first_test.go + echo 'import _ "'$package'"' >> _first_test.go + if test "$trace" = "true"; then - echo $GC -g $xpkgpatharg -c -I . -fno-toplevel-reorder -o $xofile $xgofiles + echo $GC -g $xpkgpatharg -c -I . -fno-toplevel-reorder -o $xofile _first_test.go $xgofiles fi - $GC -g $xpkgpatharg -c -I . -fno-toplevel-reorder -o $xofile $xgofiles + $GC -g $xpkgpatharg -c -I . -fno-toplevel-reorder -o $xofile _first_test.go $xgofiles fi # They all compile; now generate the code to call them.