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

gocritic check panics with invalid memory address or nil pointer dereference #1388

Open
mr0re1 opened this issue Dec 7, 2023 · 4 comments
Open

Comments

@mr0re1
Copy link

mr0re1 commented Dec 7, 2023

$ go version -m $(which gocritic)
/usr/local/google/home/orlov/go/bin/gocritic: go1.22-20230908-RC04 cl/563875016 +2fe2f08542 X:fieldtrack,boringcrypto
        path    github.com/go-critic/go-critic/cmd/gocritic
        mod     github.com/go-critic/go-critic  v0.9.0  h1:Pmys9qvU3pSML/3GEQ2Xd9RZ/ip+aXHKILuxczKGV/U=
        dep     github.com/cristalhq/acmd       v0.11.1 h1:DJ4fh2Pv0nPKmqT646IU/0Vh5FNdGblxvF+3/W3NAUI=
        dep     github.com/go-toolsmith/astcast v1.1.0  h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8=
        dep     github.com/go-toolsmith/astcopy v1.1.0  h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s=
        dep     github.com/go-toolsmith/astequal        v1.1.0  h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw=
        dep     github.com/go-toolsmith/astfmt  v1.1.0  h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco=
        dep     github.com/go-toolsmith/astp    v1.1.0  h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA=
        dep     github.com/go-toolsmith/pkgload v1.2.2  h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk=
        dep     github.com/go-toolsmith/strparse        v1.1.0  h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw=
        dep     github.com/go-toolsmith/typep   v1.1.0  h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus=
        dep     github.com/quasilyte/go-ruleguard       v0.4.0  h1:DyM6r+TKL+xbKB4Nm7Afd1IQh9kEUKQs2pboWGKtvQo=
        dep     github.com/quasilyte/gogrep     v0.5.0  h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
        dep     github.com/quasilyte/regex/syntax       v0.0.0-20210819130434-b3f0c404a727      h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU=
        dep     github.com/quasilyte/stdinfo    v0.0.0-20220114132959-f7386bf02567      h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs=
        dep     golang.org/x/exp/typeparams     v0.0.0-20230307190834-24139beb5833      h1:jWGQJV4niP+CCmFW9ekjA9Zx8vYORzOUH2/Nl5WPuLQ=
        dep     golang.org/x/mod        v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
        dep     golang.org/x/sys        v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
        dep     golang.org/x/tools      v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss=
        build   -buildmode=exe
        build   -compiler=gc
        build   DefaultGODEBUG=httplaxcontentlength=1,panicnil=1
        build   CGO_ENABLED=1
        build   CGO_CFLAGS=
        build   CGO_CPPFLAGS=
        build   CGO_CXXFLAGS=
        build   CGO_LDFLAGS=
        build   GOARCH=amd64
        build   GOEXPERIMENT=fieldtrack,boringcrypto
        build   GOOS=linux
        build   GOAMD64=v1
$ gocritic check .
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=0x1 addr=0x0 pc=0x602faa]

goroutine 300 [running]:
go/types.(*Checker).handleBailout(0xc00096a000, 0xc0010f5ba0)
        /usr/lib/google-golang/src/go/types/check.go:339 +0x88
panic({0x7ea660?, 0xb52f80?})
        /usr/lib/google-golang/src/runtime/panic.go:765 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0x8ef8c0?, 0xb56400})
        /usr/lib/google-golang/src/go/types/sizes.go:228 +0x2ea
go/types.(*Config).sizeof(...)
        /usr/lib/google-golang/src/go/types/sizes.go:331
go/types.representableConst.func1({0x8ef8c0?, 0xb56400?})
        /usr/lib/google-golang/src/go/types/const.go:76 +0x9e
go/types.representableConst({0x8f1110, 0xb474c8}, 0xc00096a000, 0xb56400, 0xc0010f17d0)
        /usr/lib/google-golang/src/go/types/const.go:92 +0x192
go/types.(*Checker).representation(0x8ef8c0?, 0xc000595300, 0x5dccd8?)
        /usr/lib/google-golang/src/go/types/const.go:256 +0x65
go/types.(*Checker).implicitTypeAndValue(0xc00096a000, 0xc000595300, {0x8ef8c0?, 0xb56400?})
        /usr/lib/google-golang/src/go/types/expr.go:375 +0x2ad
go/types.(*Checker).assignment(0xc00096a000, 0xc000595300, {0x8ef8c0, 0xb56400}, {0xc000b86090, 0x13})
        /usr/lib/google-golang/src/go/types/assignments.go:52 +0x417
go/types.(*Checker).arguments(0xc00096a000, 0xc000594b80, 0xc0005121c0, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0}, {0xc0013206d0, ...}, ...)
        /usr/lib/google-golang/src/go/types/call.go:645 +0x16de
go/types.(*Checker).callExpr(0xc00096a000, 0xc0005952c0, 0xc000594b80)
        /usr/lib/google-golang/src/go/types/call.go:302 +0x858
go/types.(*Checker).exprInternal(0xc00096a000, {0x0, 0x0}, 0xc0005952c0, {0x8f0a90, 0xc000594b80?}, {0x0?, 0x0?})
        /usr/lib/google-golang/src/go/types/expr.go:1359 +0x17df
go/types.(*Checker).rawExpr(0xc00096a000, {0x0, 0x0}, 0xc0005952c0, {0x8f0a90?, 0xc000594b80?}, {0x0?, 0x0?}, 0x0)
        /usr/lib/google-golang/src/go/types/expr.go:965 +0x1a5
go/types.(*Checker).stmt(0xc00096a000, 0x0, {0x8f0640?, 0xc000920c50?})
        /usr/lib/google-golang/src/go/types/stmt.go:397 +0x19a
go/types.(*Checker).stmtList(0xc00096a000?, 0x0, {0xc000920c60?, 0x850320?, 0x5?})
        /usr/lib/google-golang/src/go/types/stmt.go:124 +0x85
go/types.(*Checker).stmt(0xc00096a000, 0x0, {0x8f07f0?, 0xc000874f00?})
        /usr/lib/google-golang/src/go/types/stmt.go:565 +0x17a5
go/types.(*Checker).stmt(0xc00096a000, 0x0, {0x8f0820?, 0xc000594bc0?})
        /usr/lib/google-golang/src/go/types/stmt.go:577 +0x193a
go/types.(*Checker).stmtList(0xc000f4b930?, 0x0, {0xc000514080?, 0x0?, 0x0?})
        /usr/lib/google-golang/src/go/types/stmt.go:124 +0x85
go/types.(*Checker).funcBody(0xc00096a000, 0xc000c6d080, {0xc000b84aa0?, 0x6?}, 0xc000594e40, 0xc000874f30, {0x0, 0x0})
        /usr/lib/google-golang/src/go/types/stmt.go:44 +0x345
go/types.(*Checker).funcDecl.func1()
        /usr/lib/google-golang/src/go/types/decl.go:826 +0x3a
go/types.(*Checker).processDelayed(0xc00096a000, 0x0)
        /usr/lib/google-golang/src/go/types/check.go:446 +0x15c
go/types.(*Checker).checkFiles(0xc00096a000, {0xc0013205d8, 0x1, 0x1})
        /usr/lib/google-golang/src/go/types/check.go:390 +0x245
go/types.(*Checker).Files(...)
        /usr/lib/google-golang/src/go/types/check.go:344
golang.org/x/tools/go/packages.(*loader).loadPackage(0xc0003380e0, 0xc000829c20)
        /usr/local/google/home/orlov/go/pkg/mod/golang.org/x/tools@v0.12.0/go/packages/packages.go:1058 +0xc45
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1()
        /usr/local/google/home/orlov/go/pkg/mod/golang.org/x/tools@v0.12.0/go/packages/packages.go:854 +0x1a9
sync.(*Once).doSlow(0x0?, 0x0?)
        /usr/lib/google-golang/src/sync/once.go:74 +0xbf
sync.(*Once).Do(...)
        /usr/lib/google-golang/src/sync/once.go:65
golang.org/x/tools/go/packages.(*loader).loadRecursive(0xc00002a064?, 0x2b?)
        /usr/local/google/home/orlov/go/pkg/mod/golang.org/x/tools@v0.12.0/go/packages/packages.go:842 +0x4a
golang.org/x/tools/go/packages.(*loader).refine.func2(0xc0006e2b00?)
        /usr/local/google/home/orlov/go/pkg/mod/golang.org/x/tools@v0.12.0/go/packages/packages.go:777 +0x26
created by golang.org/x/tools/go/packages.(*loader).refine in goroutine 1
        /usr/local/google/home/orlov/go/pkg/mod/golang.org/x/tools@v0.12.0/go/packages/packages.go:776 +0xccf
@mr0re1
Copy link
Author

mr0re1 commented Dec 8, 2023

Minimal reproduction:

package main

import "os"

func main() {
        os.Exit(1)
}
$  gocritic check  pnc.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=0x1 addr=0x0 pc=0x60316a]

goroutine 44 [running]:
go/types.(*Checker).handleBailout(0xc0003d2000, 0xc00056dba0)
        /usr/lib/google-golang/src/go/types/check.go:339 +0x88
panic({0x7eb1c0?, 0xb53f60?})
...
package main

import "os"

func main() {
        // os.Exit(1)
}
$ gocritic check  pnc.go
$ # all good

mr0re1 added a commit to mr0re1/hpc-toolkit that referenced this issue Dec 8, 2023
mr0re1 added a commit to mr0re1/hpc-toolkit that referenced this issue Dec 8, 2023
@cristaloleg
Copy link
Member

Reminds me #1355 & #1237

@cristaloleg
Copy link
Member

Looks like go-critic was built with go1.22-20230908-RC04 which is...not something stable. This even isn't an official RC from what I understand. Fixing for this specific version is whac-a-mole game.

ek-nag pushed a commit to ek-nag/hpc-toolkit that referenced this issue Dec 8, 2023
@cristaloleg
Copy link
Member

Can you check that this works with Go 1.22 RC 2, please?

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