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
This commit is contained in:
Ian Lance Taylor 2019-09-11 12:44:12 +00:00
parent c5748fdbf4
commit d694576e17
2 changed files with 12 additions and 3 deletions

View File

@ -1,4 +1,4 @@
bf4832d604e7522dee78fca76de220b62a131d54 1f4ce28409a2d9d4045b1085de55c46de8759d1c
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -419,10 +419,12 @@ esac
# Split $gofiles into external gofiles (those in *_test packages) # Split $gofiles into external gofiles (those in *_test packages)
# and internal ones (those in the main package). # and internal ones (those in the main package).
xgofiles= xgofiles=
xpackage=
for f in $gofiles; do for f in $gofiles; do
package=`grep '^package[ ]' $f | sed 1q` package=`grep '^package[ ]' $f | sed 1q`
case "$package" in case "$package" in
*_test) *_test)
xpackage=`echo $package | sed -e 's/package[ ]//' -e 's/[ ]*$//'`
xgofiles="$xgofiles $f" xgofiles="$xgofiles $f"
;; ;;
*) *)
@ -471,10 +473,17 @@ $GC -g $pkgpatharg $prefixarg -c -I . -fno-toplevel-reorder -o _gotest_.o $gofil
if $havex; then if $havex; then
mkdir -p `dirname $package` mkdir -p `dirname $package`
cp _gotest_.o `dirname $package`/lib`basename $package`.a 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 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 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 fi
# They all compile; now generate the code to call them. # They all compile; now generate the code to call them.