Commit 3b8c8041 authored by Jay Conrod's avatar Jay Conrod

cmd/go: force -coverpkg main packages to be built as libraries

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 #31946

Change-Id: Id147527b1dbdc14bb33ac133c30d50c250b4365c
Reviewed-on: https://go-review.googlesource.com/c/go/+/176558
Run-TryBot: Jay Conrod <jayconrod@google.com>
Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent ef4666ec
...@@ -353,9 +353,10 @@ Search: ...@@ -353,9 +353,10 @@ Search:
// preal, packages that import the package under test should get ptest instead // preal, packages that import the package under test should get ptest instead
// of preal. This is particularly important if pxtest depends on functionality // of preal. This is particularly important if pxtest depends on functionality
// exposed in test sources in ptest. Second, if there is a main package // 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 // (other than pmain) anywhere, we need to set p.Internal.ForceLibrary and
// the test copy to prevent link conflicts. This may happen if both -coverpkg // clear p.Internal.BuildInfo in the test copy to prevent link conflicts.
// and the command line patterns include multiple main packages. // This may happen if both -coverpkg and the command line patterns include
// multiple main packages.
func recompileForTest(pmain, preal, ptest, pxtest *Package) { func recompileForTest(pmain, preal, ptest, pxtest *Package) {
// The "test copy" of preal is ptest. // The "test copy" of preal is ptest.
// For each package that depends on preal, make a "test copy" // For each package that depends on preal, make a "test copy"
...@@ -386,6 +387,7 @@ func recompileForTest(pmain, preal, ptest, pxtest *Package) { ...@@ -386,6 +387,7 @@ func recompileForTest(pmain, preal, ptest, pxtest *Package) {
p = p1 p = p1
p.Target = "" p.Target = ""
p.Internal.BuildInfo = "" p.Internal.BuildInfo = ""
p.Internal.ForceLibrary = true
} }
// Update p.Internal.Imports to use test copies. // Update p.Internal.Imports to use test copies.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment