What version of Go are you using (go version)?
$ go version
go version go1.18beta1 darwin/amd64
and
$ go version
go version devel go1.18-95b240b Mon Jan 3 23:45:12 2022 +0000 darwin/amd64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/pcostanz/Library/Caches/go-build"
GOENV="/Users/pcostanz/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/pcostanz/go/pkg/mod"
GONOPROXY=/*set but not revealed*/
GONOSUMDB=/*set but not revealed*/
GOOS="darwin"
GOPATH="/Users/pcostanz/go"
GOPRIVATE=/*set but not revealed*/
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/pcostanz/sdk/gotip"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/pcostanz/sdk/gotip/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="devel go1.18-95b240b Mon Jan 3 23:45:12 2022 +0000"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/z2/j1tgwrsx2cdcpr780wzjk6tw0000gq/T/go-build154765131=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
It is very difficult to reproduce the issue. I am currently developing a set of three libraries depending on each other, using generic types in current go 1.18 beta / development versions. (library A depends on B, library B depends on C) The bug occurs when I try to build library A, and it seems to be triggered by an instantiation of a generic function from library B.
The error message I get is the following in go1.18beta1
go1.18beta1 build *.go
# command-line-arguments
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x4 pc=0x17ee660]
goroutine 1 [running]:
cmd/compile/internal/noder.(*genInst).genericSubst(0x1f89a60, 0xc001c22eb0, 0xc000f82270, {0xc000e02798, 0x1, 0x1}, 0x1, 0xc001ac35d8)
/usr/local/go/src/cmd/compile/internal/noder/stencil.go:758 +0x160
cmd/compile/internal/noder.(*genInst).getInstantiation(0x1f89a60, 0xc000f82270, {0xc000e02790, 0x1, 0x1a8ecb8?}, 0x38?)
/usr/local/go/src/cmd/compile/internal/noder/stencil.go:703 +0x39d
cmd/compile/internal/noder.(*genInst).scanForGenCalls.func1({0x1a8d6d8, 0xc001696f30?})
/usr/local/go/src/cmd/compile/internal/noder/stencil.go:176 +0x2df
cmd/compile/internal/ir.Visit.func1({0x1a8d6d8, 0xc001696f30})
/usr/local/go/src/cmd/compile/internal/ir/visit.go:105 +0x30
cmd/compile/internal/ir.doNodes(...)
/usr/local/go/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*AssignListStmt).doChildren(0xc001ab40c0, 0xc001ac35c0)
/usr/local/go/src/cmd/compile/internal/ir/node_gen.go:100 +0xa9
cmd/compile/internal/ir.DoChildren(...)
/usr/local/go/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a8d160, 0xc001ab40c0})
/usr/local/go/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.doNodes(...)
/usr/local/go/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*Func).doChildren(0x1a8e038?, 0xc001ac35c0?)
/usr/local/go/src/cmd/compile/internal/ir/func.go:152 +0x6e
cmd/compile/internal/ir.DoChildren(...)
/usr/local/go/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a8e038, 0xc0022542c0})
/usr/local/go/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.Visit({0x1a8e038, 0xc0022542c0}, 0xc001c04f00)
/usr/local/go/src/cmd/compile/internal/ir/visit.go:108 +0xb8
cmd/compile/internal/noder.(*genInst).scanForGenCalls(0x1f89a60, {0x1a8e038, 0xc0022542c0})
/usr/local/go/src/cmd/compile/internal/noder/stencil.go:158 +0x1f0
cmd/compile/internal/noder.(*genInst).buildInstantiations(0x1f89a60, 0x1)
/usr/local/go/src/cmd/compile/internal/noder/stencil.go:73 +0x85
cmd/compile/internal/noder.BuildInstantiations(...)
/usr/local/go/src/cmd/compile/internal/noder/stencil.go:47
cmd/compile/internal/noder.(*irgen).generate(0xc000174240, {0xc000433b80, 0xa, 0x203000?})
/usr/local/go/src/cmd/compile/internal/noder/irgen.go:320 +0x3db
cmd/compile/internal/noder.check2({0xc000433b80, 0xa, 0xa})
/usr/local/go/src/cmd/compile/internal/noder/irgen.go:92 +0x16d
cmd/compile/internal/noder.LoadPackage({0xc000128110, 0xa, 0x0?})
/usr/local/go/src/cmd/compile/internal/noder/noder.go:90 +0x335
cmd/compile/internal/gc.Main(0x1946fe8)
/usr/local/go/src/cmd/compile/internal/gc/main.go:191 +0xb13
main.main()
/usr/local/go/src/cmd/compile/main.go:55 +0xdd
I get the following with the gotip version:
gotip build *.go
# command-line-arguments
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x4 pc=0x17ef320]
goroutine 1 [running]:
cmd/compile/internal/noder.(*genInst).genericSubst(0x1f8daa0, 0xc0023a66e0, 0xc0021f6820, {0xc0023a4478, 0x1, 0x1}, 0x1, 0xc00239f9b0)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:758 +0x160
cmd/compile/internal/noder.(*genInst).getInstantiation(0x1f8daa0, 0xc0021f6820, {0xc0023a4470, 0x1, 0x1a90018?}, 0x98?)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:703 +0x39d
cmd/compile/internal/noder.(*genInst).scanForGenCalls.func1({0x1a8ea38, 0xc00222a360?})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:176 +0x2df
cmd/compile/internal/ir.Visit.func1({0x1a8ea38, 0xc00222a360})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:105 +0x30
cmd/compile/internal/ir.doNodes(...)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*AssignListStmt).doChildren(0xc0022264e0, 0xc00239f998)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/node_gen.go:100 +0xa9
cmd/compile/internal/ir.DoChildren(...)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a8e4c0, 0xc0022264e0})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.doNodes(...)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*Func).doChildren(0x1a8f398?, 0xc00239f998?)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/func.go:152 +0x6e
cmd/compile/internal/ir.DoChildren(...)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a8f398, 0xc00221adc0})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.Visit({0x1a8f398, 0xc00221adc0}, 0xc0023aa040)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:108 +0xb8
cmd/compile/internal/noder.(*genInst).scanForGenCalls(0x1f8daa0, {0x1a8f398, 0xc00221adc0})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:158 +0x1f0
cmd/compile/internal/noder.(*genInst).buildInstantiations(0x1f8daa0, 0x1)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:73 +0x85
cmd/compile/internal/noder.BuildInstantiations(...)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:47
cmd/compile/internal/noder.(*irgen).generate(0xc00014c240, {0xc000403bd0, 0xa, 0x203000?})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/irgen.go:320 +0x3db
cmd/compile/internal/noder.check2({0xc000403bd0, 0xa, 0xa})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/irgen.go:92 +0x16d
cmd/compile/internal/noder.LoadPackage({0xc000003950, 0xa, 0x0?})
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/noder.go:90 +0x335
cmd/compile/internal/gc.Main(0x1948090)
/Users/pcostanz/sdk/gotip/src/cmd/compile/internal/gc/main.go:191 +0xb13
main.main()
/Users/pcostanz/sdk/gotip/src/cmd/compile/main.go:55 +0xdd
I have tried several times to create a small example that triggers the same bug, but I haven't yet managed to do so.
What did you expect to see?
I believe the source code to be correct. go1.18beta1 vet *.go and gotip vet *.go don't report any issues.
What did you see instead?
See above.
What version of Go are you using (
go version)?and
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env)?go envOutputWhat did you do?
It is very difficult to reproduce the issue. I am currently developing a set of three libraries depending on each other, using generic types in current go 1.18 beta / development versions. (library A depends on B, library B depends on C) The bug occurs when I try to build library A, and it seems to be triggered by an instantiation of a generic function from library B.
The error message I get is the following in go1.18beta1
go1.18beta1 build *.go # command-line-arguments panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x4 pc=0x17ee660] goroutine 1 [running]: cmd/compile/internal/noder.(*genInst).genericSubst(0x1f89a60, 0xc001c22eb0, 0xc000f82270, {0xc000e02798, 0x1, 0x1}, 0x1, 0xc001ac35d8) /usr/local/go/src/cmd/compile/internal/noder/stencil.go:758 +0x160 cmd/compile/internal/noder.(*genInst).getInstantiation(0x1f89a60, 0xc000f82270, {0xc000e02790, 0x1, 0x1a8ecb8?}, 0x38?) /usr/local/go/src/cmd/compile/internal/noder/stencil.go:703 +0x39d cmd/compile/internal/noder.(*genInst).scanForGenCalls.func1({0x1a8d6d8, 0xc001696f30?}) /usr/local/go/src/cmd/compile/internal/noder/stencil.go:176 +0x2df cmd/compile/internal/ir.Visit.func1({0x1a8d6d8, 0xc001696f30}) /usr/local/go/src/cmd/compile/internal/ir/visit.go:105 +0x30 cmd/compile/internal/ir.doNodes(...) /usr/local/go/src/cmd/compile/internal/ir/node_gen.go:1512 cmd/compile/internal/ir.(*AssignListStmt).doChildren(0xc001ab40c0, 0xc001ac35c0) /usr/local/go/src/cmd/compile/internal/ir/node_gen.go:100 +0xa9 cmd/compile/internal/ir.DoChildren(...) /usr/local/go/src/cmd/compile/internal/ir/visit.go:94 cmd/compile/internal/ir.Visit.func1({0x1a8d160, 0xc001ab40c0}) /usr/local/go/src/cmd/compile/internal/ir/visit.go:106 +0x57 cmd/compile/internal/ir.doNodes(...) /usr/local/go/src/cmd/compile/internal/ir/node_gen.go:1512 cmd/compile/internal/ir.(*Func).doChildren(0x1a8e038?, 0xc001ac35c0?) /usr/local/go/src/cmd/compile/internal/ir/func.go:152 +0x6e cmd/compile/internal/ir.DoChildren(...) /usr/local/go/src/cmd/compile/internal/ir/visit.go:94 cmd/compile/internal/ir.Visit.func1({0x1a8e038, 0xc0022542c0}) /usr/local/go/src/cmd/compile/internal/ir/visit.go:106 +0x57 cmd/compile/internal/ir.Visit({0x1a8e038, 0xc0022542c0}, 0xc001c04f00) /usr/local/go/src/cmd/compile/internal/ir/visit.go:108 +0xb8 cmd/compile/internal/noder.(*genInst).scanForGenCalls(0x1f89a60, {0x1a8e038, 0xc0022542c0}) /usr/local/go/src/cmd/compile/internal/noder/stencil.go:158 +0x1f0 cmd/compile/internal/noder.(*genInst).buildInstantiations(0x1f89a60, 0x1) /usr/local/go/src/cmd/compile/internal/noder/stencil.go:73 +0x85 cmd/compile/internal/noder.BuildInstantiations(...) /usr/local/go/src/cmd/compile/internal/noder/stencil.go:47 cmd/compile/internal/noder.(*irgen).generate(0xc000174240, {0xc000433b80, 0xa, 0x203000?}) /usr/local/go/src/cmd/compile/internal/noder/irgen.go:320 +0x3db cmd/compile/internal/noder.check2({0xc000433b80, 0xa, 0xa}) /usr/local/go/src/cmd/compile/internal/noder/irgen.go:92 +0x16d cmd/compile/internal/noder.LoadPackage({0xc000128110, 0xa, 0x0?}) /usr/local/go/src/cmd/compile/internal/noder/noder.go:90 +0x335 cmd/compile/internal/gc.Main(0x1946fe8) /usr/local/go/src/cmd/compile/internal/gc/main.go:191 +0xb13 main.main() /usr/local/go/src/cmd/compile/main.go:55 +0xddI get the following with the gotip version:
gotip build *.go # command-line-arguments panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x4 pc=0x17ef320] goroutine 1 [running]: cmd/compile/internal/noder.(*genInst).genericSubst(0x1f8daa0, 0xc0023a66e0, 0xc0021f6820, {0xc0023a4478, 0x1, 0x1}, 0x1, 0xc00239f9b0) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:758 +0x160 cmd/compile/internal/noder.(*genInst).getInstantiation(0x1f8daa0, 0xc0021f6820, {0xc0023a4470, 0x1, 0x1a90018?}, 0x98?) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:703 +0x39d cmd/compile/internal/noder.(*genInst).scanForGenCalls.func1({0x1a8ea38, 0xc00222a360?}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:176 +0x2df cmd/compile/internal/ir.Visit.func1({0x1a8ea38, 0xc00222a360}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:105 +0x30 cmd/compile/internal/ir.doNodes(...) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/node_gen.go:1512 cmd/compile/internal/ir.(*AssignListStmt).doChildren(0xc0022264e0, 0xc00239f998) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/node_gen.go:100 +0xa9 cmd/compile/internal/ir.DoChildren(...) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:94 cmd/compile/internal/ir.Visit.func1({0x1a8e4c0, 0xc0022264e0}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57 cmd/compile/internal/ir.doNodes(...) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/node_gen.go:1512 cmd/compile/internal/ir.(*Func).doChildren(0x1a8f398?, 0xc00239f998?) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/func.go:152 +0x6e cmd/compile/internal/ir.DoChildren(...) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:94 cmd/compile/internal/ir.Visit.func1({0x1a8f398, 0xc00221adc0}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:106 +0x57 cmd/compile/internal/ir.Visit({0x1a8f398, 0xc00221adc0}, 0xc0023aa040) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/ir/visit.go:108 +0xb8 cmd/compile/internal/noder.(*genInst).scanForGenCalls(0x1f8daa0, {0x1a8f398, 0xc00221adc0}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:158 +0x1f0 cmd/compile/internal/noder.(*genInst).buildInstantiations(0x1f8daa0, 0x1) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:73 +0x85 cmd/compile/internal/noder.BuildInstantiations(...) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/stencil.go:47 cmd/compile/internal/noder.(*irgen).generate(0xc00014c240, {0xc000403bd0, 0xa, 0x203000?}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/irgen.go:320 +0x3db cmd/compile/internal/noder.check2({0xc000403bd0, 0xa, 0xa}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/irgen.go:92 +0x16d cmd/compile/internal/noder.LoadPackage({0xc000003950, 0xa, 0x0?}) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/noder/noder.go:90 +0x335 cmd/compile/internal/gc.Main(0x1948090) /Users/pcostanz/sdk/gotip/src/cmd/compile/internal/gc/main.go:191 +0xb13 main.main() /Users/pcostanz/sdk/gotip/src/cmd/compile/main.go:55 +0xddI have tried several times to create a small example that triggers the same bug, but I haven't yet managed to do so.
What did you expect to see?
I believe the source code to be correct. go1.18beta1 vet *.go and gotip vet *.go don't report any issues.
What did you see instead?
See above.