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

Change-Id: I837ddd985a3a10e881c87cfe0dba4e6d369ab732
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194637
Reviewed-by: Than McIntosh <thanm@google.com>
diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest
index 60bead5..9d46916 100755
--- a/libgo/testsuite/gotest
+++ b/libgo/testsuite/gotest
@@ -419,10 +419,12 @@
 # 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 @@
 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.