Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

go generate broken with go 1.22 #286

Closed
philborlin opened this issue May 16, 2024 · 3 comments
Closed

go generate broken with go 1.22 #286

philborlin opened this issue May 16, 2024 · 3 comments

Comments

@philborlin
Copy link

I picked up a project that I haven't worked on in awhile and ran go generate and got a panic. Here are the relevant files:

tools.go

//go:build tools

package tools

import (
	_ "github.com/maxbrunsfeld/counterfeiter/v6" // counterfeiter
)

cluster.go

package cluster

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate

//counterfeiter:generate . Cluster
type Cluster interface {
	Propose(p []byte) error
}

When I use go 1.20 generate works correctly:

$ /opt/homebrew/opt/go@1.20/bin/go generate ./...
Writing `FakeCluster` to `clusterfakes/fake_cluster.go`... Done

When I use go 1.21 generate works correctly:

$ /opt/homebrew/opt/go@1.21/bin/go generate ./...
Writing `FakeCluster` to `clusterfakes/fake_cluster.go`... Done

When I use go 1.22 generate panics:

$ go version
go version go1.22.3 darwin/arm64
$ go generate ./...
Writing `FakeCluster` to `clusterfakes/fake_cluster.go`... panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x1030ee2a4]

goroutine 148 [running]:
go/types.(*Checker).handleBailout(0x140002d0600, 0x140002dfc38)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/check.go:367 +0x9c
panic({0x10325e460?, 0x1034b1b10?})
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/runtime/panic.go:770 +0x124
go/types.(*StdSizes).Sizeof(0x0, {0x1032af008, 0x1034b5480})
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/sizes.go:228 +0x314
go/types.(*Config).sizeof(...)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/sizes.go:333
go/types.representableConst.func1({0x1032af008?, 0x1034b5480?})
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/const.go:76 +0x9c
go/types.representableConst({0x1032b0ef8, 0x1034a91a0}, 0x140002d0600, 0x1034b5480, 0x0)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/const.go:92 +0x138
go/types.(*Checker).arrayLength(0x140002d0600, {0x1032b0810, 0x140002af6c0?})
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/typexpr.go:510 +0x238
go/types.(*Checker).typInternal(0x140002d0600, {0x1032b0090, 0x140002aaed0}, 0x0)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/typexpr.go:299 +0x3bc
go/types.(*Checker).definedType(0x140002d0600, {0x1032b0090, 0x140002aaed0}, 0x140002df1f8?)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/typexpr.go:180 +0x2c
go/types.(*Checker).varType(0x140002d0600, {0x1032b0090, 0x140002aaed0})
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/typexpr.go:145 +0x2c
go/types.(*Checker).structType(0x140002d0600, 0x140002ab230, 0x140002ab230?)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/struct.go:113 +0x128
go/types.(*Checker).typInternal(0x140002d0600, {0x1032b00c0, 0x1400028d5c0}, 0x140002fa910)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/typexpr.go:316 +0xed0
go/types.(*Checker).definedType(0x140002d0600, {0x1032b00c0, 0x1400028d5c0}, 0x102ecae24?)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/typexpr.go:180 +0x2c
go/types.(*Checker).typeDecl(0x140002d0600, 0x140002fa910, 0x140002c96c0, 0x0)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/decl.go:615 +0x39c
go/types.(*Checker).objDecl(0x140002d0600, {0x1032b4018, 0x140002fa910}, 0x0)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/decl.go:197 +0x880
go/types.(*Checker).packageObjects(0x140002d0600)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/resolver.go:681 +0x3c0
go/types.(*Checker).checkFiles(0x140002d0600, {0x140002ba380, 0x1, 0x1})
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/check.go:408 +0x164
go/types.(*Checker).Files(...)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/go/types/check.go:372
golang.org/x/tools/go/packages.(*loader).loadPackage(0x140001a61c0, 0x14000431cc0)
        /Users/phil/go/pkg/mod/golang.org/x/tools@v0.1.12/go/packages/packages.go:1001 +0x624
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1()
        /Users/phil/go/pkg/mod/golang.org/x/tools@v0.1.12/go/packages/packages.go:838 +0x178
sync.(*Once).doSlow(0x0?, 0x0?)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/sync/once.go:74 +0x100
sync.(*Once).Do(...)
        /opt/homebrew/Cellar/go/1.22.3/libexec/src/sync/once.go:65
golang.org/x/tools/go/packages.(*loader).loadRecursive(0x0?, 0x0?)
        /Users/phil/go/pkg/mod/golang.org/x/tools@v0.1.12/go/packages/packages.go:826 +0x50
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1.1(0x0?)
        /Users/phil/go/pkg/mod/golang.org/x/tools@v0.1.12/go/packages/packages.go:833 +0x30
created by golang.org/x/tools/go/packages.(*loader).loadRecursive.func1 in goroutine 125
        /Users/phil/go/pkg/mod/golang.org/x/tools@v0.1.12/go/packages/packages.go:832 +0x84
exit status 2
cluster.go:3: running "go": exit status 1
@joefitzgerald
Copy link
Collaborator

Please update the version of counterfeiter. You are likely using an old version. Check your go.mod and run go get -u github.com/maxbrunsfeld/counterfeiter/v6to update the version.

@philborlin
Copy link
Author

That worked! Sorry that seems pretty obvious in hindsight.

@joefitzgerald
Copy link
Collaborator

No problem, I'm glad you got it sorted out!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants