go: cmd/compile, x/sync/errgroup: TestWithContext failing after devirtualization CL
What version of Go are you using (go version
)?
$ go version go version devel +fe70a3a0fd Thu Oct 29 21:46:54 2020 +0000 linux/amd64
Does this issue reproduce with the latest release?
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/jake/.cache/go-build" GOENV="/home/jake/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/jake/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/jake/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/home/jake/sdk/gotip" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/home/jake/sdk/gotip/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/jake/zikaeroh/sync/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-build875916662=/tmp/go-build -gno-record-gcc-switches" GOROOT/bin/go version: go version devel +fe70a3a0fd Thu Oct 29 21:46:54 2020 +0000 linux/amd64 GOROOT/bin/go tool compile -V: compile version devel +fe70a3a0fd Thu Oct 29 21:46:54 2020 +0000 uname -sr: Linux 5.9.1-zen2-1-zen /usr/lib/libc.so.6: GNU C Library (GNU libc) release release version 2.32. gdb --version: GNU gdb (GDB) 9.2
What did you do?
In the golang.org/x/sync/errgroup
package, run go test
.
What did you expect to see?
Passing tests.
What did you see instead?
--- FAIL: TestWithContext (0.00s)
panic: interface conversion: context.Context is *context.cancelCtx, not *context.emptyCtx [recovered]
panic: interface conversion: context.Context is *context.cancelCtx, not *context.emptyCtx
goroutine 29 [running]:
testing.tRunner.func1.2(0x5b0e80, 0xc0000a4e70)
/home/jake/sdk/gotip/src/testing/testing.go:1123 +0x332
testing.tRunner.func1(0xc000083080)
/home/jake/sdk/gotip/src/testing/testing.go:1126 +0x4b6
panic(0x5b0e80, 0xc0000a4e70)
/home/jake/sdk/gotip/src/runtime/panic.go:965 +0x1b9
golang.org/x/sync/errgroup_test.TestWithContext(0xc000083080)
/home/jake/zikaeroh/sync/errgroup/errgroup_test.go:166 +0x652
testing.tRunner(0xc000083080, 0x5f4c88)
/home/jake/sdk/gotip/src/testing/testing.go:1173 +0xef
created by testing.(*T).Run
/home/jake/sdk/gotip/src/testing/testing.go:1218 +0x2b3
exit status 2
FAIL golang.org/x/sync/errgroup 0.005s
https://build.golang.org/log/8759ffb3dd087325958f6d2d67773f3dd2f70cf2 https://build.golang.org/log/32b25547fddc3b46c217c9efffb9aa124df3766e
The dashboard shows this test consistently failing after the devirtualization CL, but this differs from #42279 as it affects runtime behavior.
cc @mdempsky
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 15 (11 by maintainers)
@kivikakk Thanks for the report! I was able to create a reproducer.
@cespare That’s a fair point. There’s certainly a trade off though: the more effort put into improving the early devirtualization code is effort taken away from moving escape analysis to SSA. The current early devirtualization pass is basically just a minor extension of the inlining / escape analysis improvements implemented for #41474
If you do see that practice developing, let us know and we can revisit whether there are more cases that we can handle without too much trouble.
Ah, I had no idea this was at the AST level where you couldn’t distinguish it. Clearly I’m not paying enough attention during your streams. 🙂
See https://build.golang.org/?repo=golang.org%2Fx%2Fsync; the page is all red on tip.