gotest: force test package to be imported first
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 11 Sep 2019 12:44:12 +0000 (12:44 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 11 Sep 2019 12:44:12 +0000 (12:44 +0000)
    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
libgo/testsuite/gotest

index 61845bc83c20fd03773b85bb312ec3e90e3cc78d..895aa6f3fcc349359cd250432ec7c17a664bbfed 100644 (file)
@@ -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.
index 60bead5e7d6288619b47bdbb942f69d733cdd790..9d46916d69af49cf3f3a42bbc8b2ae08acfb14bd 100755 (executable)
@@ -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.