go: cmd/go: duplicate symbols when including two main packages in -coverpkg in module mode
Note that I am not sure if this is a bug or expected behaviour, only that this does not happen in the latest stable 1.11 release and does on 1.12rc1.
What version of Go are you using (go version
)?
$ go version go version go1.12rc1 linux/amd64
Does this issue reproduce with the latest release?
Not the latest stable release (1.11.5)
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GOARCH="amd64" GOBIN="" GOCACHE="/home/lazer/.cache/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/home/lazer/go" GOPROXY="" GORACE="" GOROOT="/home/lazer/sdk/go1.12rc1" GOTMPDIR="" GOTOOLDIR="/home/lazer/sdk/go1.12rc1/pkg/tool/linux_amd64" GCCGO="gccgo" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/lazer/Dev/gosnaillife/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build721704492=/tmp/go-build -gno-record-gcc-switches"
What did you do?
I ran the following command:
go1.12rc1 test -race -v -coverpkg gitlab.com/drakonka/gosnaillife/cmd/snaillifecli,gitlab.com/drakonka/gosnaillife/cmd/snaillifesrv, -coverprofile allcoverage-rc.out ./...
Both of the above are main
packages producing two binaries.
What did you expect to see?
I expected the tests to run and pass, with coverage output, as they do on Go 1.11.5
What did you see instead?
The following error:
2019/02/24 11:39:04 duplicate symbol runtime/debug.modinfo (types 30 and 30) in gitlab.com/drakonka/gosnaillife/cmd/snaillifecli and $WORK/b293/_pkg_.a(_go_.o)
I run Go RC and Go 1.11 side by side as part of my CI, which is how I noticed this issue. I am able to reproduce it locally as well. Full logs for the successful run of Go 1.11 and the failure run of Go 1.12rc1 can be found here:
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Reactions: 3
- Comments: 25 (17 by maintainers)
Commits related to this issue
- Removed one of the examples - can't have 2 main packages otherwise go cov fails https://github.com/golang/go/issues/30374 — committed to peterzen/goresolver by peterzen 5 years ago
@gopherbot, please backport to 1.12. This is a significant regression from GOPATH mode and the fix is straightforward.
I’ve been doing it like this:
Change https://golang.org/cl/164877 mentions this issue:
cmd/go: avoid link errors when -coverpkg covers main packages
Given that we do not currently merge coverage profiles from multiple processes (#28235), I’m not sure why you would want to include two different
main
packages in the same-coverpkg
argument (except, perhaps, to simplify the patterns passed to-coverpkg
).The workaround for now is to include at most one
main
package in the-coverpkg
arguments, or to run coverage inGOPATH
mode.I found the same regression just a few days ago, but hadn’t filed an issue yet. This is impeding my daily development, and I’d consider it a regression introduced in 1.12.
The 1.12 release will be out any day now though, so it’s probably more realistic to target a backport to 1.12.1. /cc @bcmills @ianlancetaylor @hyangah since this very likely relates to the recent modinfo changes in the cycle.