]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.12] cmd/go: force -coverpkg main packages to be built as libraries
authorJay Conrod <jayconrod@google.com>
Fri, 10 May 2019 15:49:08 +0000 (11:49 -0400)
committerDmitri Shuralyov <dmitshur@golang.org>
Fri, 7 Jun 2019 22:33:16 +0000 (22:33 +0000)
This fixes TestScript/cover_pkgall_multiple_mains, which started
failing after CL 174657.

When compiling main packages with coverage instrumentation
(e.g., for -coverpkg all), we now pass -p with the full import path
instead of '-p main'. This avoids link errors
'duplicate symbol main.main (types 1 and 1)'.

Fixes #32295
Updates #31946
Updates #32150

Change-Id: Id147527b1dbdc14bb33ac133c30d50c250b4365c
Reviewed-on: https://go-review.googlesource.com/c/go/+/176558
Run-TryBot: Jay Conrod <jayconrod@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
(cherry picked from commit 3b8c804164e26bdec6ca94a5ab1b5c35fa119e5e)
Reviewed-on: https://go-review.googlesource.com/c/go/+/179677

src/cmd/go/internal/load/test.go

index 48d03d8fce404bd37890c0d24a86199865d3fa2d..4d4d144791cda9f4834dd1abe1193e3fa663dbc2 100644 (file)
@@ -321,9 +321,10 @@ Search:
 // preal, packages that import the package under test should get ptest instead
 // of preal. This is particularly important if pxtest depends on functionality
 // exposed in test sources in ptest. Second, if there is a main package
-// (other than pmain) anywhere, we need to clear p.Internal.BuildInfo in
-// the test copy to prevent link conflicts. This may happen if both -coverpkg
-// and the command line patterns include multiple main packages.
+// (other than pmain) anywhere, we need to set p.Internal.ForceLibrary and
+// clear p.Internal.BuildInfo in the test copy to prevent link conflicts.
+// This may happen if both -coverpkg and the command line patterns include
+// multiple main packages.
 func recompileForTest(pmain, preal, ptest, pxtest *Package) {
        // The "test copy" of preal is ptest.
        // For each package that depends on preal, make a "test copy"
@@ -354,6 +355,7 @@ func recompileForTest(pmain, preal, ptest, pxtest *Package) {
                        p = p1
                        p.Target = ""
                        p.Internal.BuildInfo = ""
+                       p.Internal.ForceLibrary = true
                }
 
                // Update p.Internal.Imports to use test copies.