Skip to content
New issue

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

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

Already on GitHub? # to your account

Go 1.18: Panic: buildir: package "provider" #2664

Closed
4 tasks done
andig opened this issue Mar 20, 2022 · 8 comments
Closed
4 tasks done

Go 1.18: Panic: buildir: package "provider" #2664

andig opened this issue Mar 20, 2022 · 8 comments
Labels
question Further information is requested

Comments

@andig
Copy link

andig commented Mar 20, 2022

Welcome

  • Yes, I'm using a binary release within 2 latest major releases. Only such installations are supported.
  • Yes, I've searched similar issues on GitHub and didn't find any.
  • Yes, I've included all information below (version, config, etc).
  • Yes, I've tried with the standalone linter if available. (https://golangci-lint.run/usage/linters/)

Description of the problem

Linting panics:

❯ make lint
golangci-lint run
ERRO [runner] Panic: buildir: package "provider" (isInitialPkg: false, needAnalyzeSource: true): T: goroutine 15062 [running]:
runtime/debug.Stack()
	runtime/debug/stack.go:24 +0x68
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func1()
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:101 +0x104
panic({0x10347b000, 0x14004251620})
	runtime/panic.go:838 +0x204
honnef.co/go/tools/go/ir.(*Program).needMethods(0x14001a620e0, {0x1034e1688?, 0x14004251620?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:237 +0x524
honnef.co/go/tools/go/ir.(*Program).needMethods(0x14001a620e0, {0x1034e1660?, 0x140078a9440?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:233 +0x600
honnef.co/go/tools/go/ir.(*Program).needMethods(0x14001a620e0, {0x1034e15c0?, 0x140078cb1c0?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:210 +0x3e8
honnef.co/go/tools/go/ir.(*Program).needMethods(0x14001a620e0, {0x1034e1660?, 0x140078a9470?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:233 +0x600
honnef.co/go/tools/go/ir.(*Program).needMethods(0x14001a620e0, {0x1034e15c0?, 0x140078cb140?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:209 +0x3cc
honnef.co/go/tools/go/ir.(*Program).needMethodsOf(0x14005ae3af0?, {0x1034e15c0?, 0x140078cb140?})
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:145 +0xb4
honnef.co/go/tools/go/ir.(*Package).build(0x140082fbc20)
	honnef.co/go/tools@v0.2.2/go/ir/builder.go:2375 +0xd8
sync.(*Once).doSlow(0x14001a620e0?, 0x140078b4000?)
	sync/once.go:68 +0x10c
sync.(*Once).Do(...)
	sync/once.go:59
honnef.co/go/tools/go/ir.(*Package).Build(...)
	honnef.co/go/tools@v0.2.2/go/ir/builder.go:2363
honnef.co/go/tools/internal/passes/buildir.run(0x1400858c820)
	honnef.co/go/tools@v0.2.2/internal/passes/buildir/buildir.go:86 +0x28c
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyze(0x14003332320)
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:187 +0x96c
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func2()
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:105 +0x24
github.com/golangci/golangci-lint/pkg/timeutils.(*Stopwatch).TrackStage(0x14000aafea0, {0x10307f191, 0x7}, 0x14002b76f30)
	github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:111 +0x48
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe(0x102c64e00?)
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:104 +0x78
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze.func2(0x14003332320)
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_loadingpackage.go:80 +0xb4
created by github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_loadingpackage.go:75 +0x16c
WARN [runner] Can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "provider" (isInitialPkg: false, needAnalyzeSource: true): T
ERRO Running error: 1 error occurred:
	* can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "provider" (isInitialPkg: false, needAnalyzeSource: true): T

Version of golangci-lint

$ golangci-lint --version
golangci-lint has version 1.45.0 built from 1f4c1ed on 2022-03-18T14:35:36Z```

Configuration file

$ cat .golangci.yml
issues:
  exclude:
  - .regActualCurrent. is unused
  - "`routeLogger` is unused"

Go environment

$ go version && go envgo version && go env
go version go1.18 darwin/arm64
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/andig/Library/Caches/go-build"
GOENV="/Users/andig/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/andig/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/andig/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/opt/homebrew/Cellar/go/1.18/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/opt/homebrew/Cellar/go/1.18/libexec/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.18"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/andig/htdocs/evcc/go.mod"
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 arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/sv/rs_453y57xj86xsbz3kw1mbc0000gn/T/go-build1021287890=/tmp/go-build -gno-record-gcc-switches -fno-common"

Verbose output of running

$ golangci-lint cache clean
$ golangci-lint run -vgolangci-lint run -v
INFO [config_reader] Config search paths: [./ /Users/andig/htdocs/evcc /Users/andig/htdocs /Users/andig /Users /]
INFO [config_reader] Used config file .golangci.yml
INFO [lintersdb] Active 10 linters: [deadcode errcheck gosimple govet ineffassign staticcheck structcheck typecheck unused varcheck]
INFO [loader] Go packages loading at mode 575 (imports|deps|exports_file|name|types_sizes|compiled_files|files) took 1.30858525s
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 12.684708ms
INFO [linters context/goanalysis] analyzers took 32.382452156s with top 10 stages: buildir: 17.937472259s, fact_deprecated: 1.573165623s, inspect: 1.345512898s, printf: 1.162804344s, ctrlflow: 889.364007ms, nilness: 852.838036ms, fact_purity: 683.247877ms, typedness: 543.268471ms, SA5012: 408.588546ms, directives: 176.904082ms
ERRO [runner] Panic: buildir: package "provider" (isInitialPkg: false, needAnalyzeSource: true): T: goroutine 23246 [running]:
runtime/debug.Stack()
	runtime/debug/stack.go:24 +0x68
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func1()
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:101 +0x104
panic({0x103547000, 0x14019e57c20})
	runtime/panic.go:838 +0x204
honnef.co/go/tools/go/ir.(*Program).needMethods(0x140079d4d20, {0x1035ad688?, 0x14019e57c20?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:237 +0x524
honnef.co/go/tools/go/ir.(*Program).needMethods(0x140079d4d20, {0x1035ad660?, 0x1400fdedd70?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:233 +0x600
honnef.co/go/tools/go/ir.(*Program).needMethods(0x140079d4d20, {0x1035ad5c0?, 0x1400de7b340?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:210 +0x3e8
honnef.co/go/tools/go/ir.(*Program).needMethods(0x140079d4d20, {0x1035ad660?, 0x1400fdedda0?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:233 +0x600
honnef.co/go/tools/go/ir.(*Program).needMethods(0x140079d4d20, {0x1035ad5c0?, 0x1400de7b2c0?}, 0x0)
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:209 +0x3cc
honnef.co/go/tools/go/ir.(*Program).needMethodsOf(0x1400410e690?, {0x1035ad5c0?, 0x1400de7b2c0?})
	honnef.co/go/tools@v0.2.2/go/ir/methods.go:145 +0xb4
honnef.co/go/tools/go/ir.(*Package).build(0x1401f6a2360)
	honnef.co/go/tools@v0.2.2/go/ir/builder.go:2375 +0xd8
sync.(*Once).doSlow(0x140079d4d20?, 0x140198d14f0?)
	sync/once.go:68 +0x10c
sync.(*Once).Do(...)
	sync/once.go:59
honnef.co/go/tools/go/ir.(*Package).Build(...)
	honnef.co/go/tools@v0.2.2/go/ir/builder.go:2363
honnef.co/go/tools/internal/passes/buildir.run(0x1401fc304e0)
	honnef.co/go/tools@v0.2.2/internal/passes/buildir/buildir.go:86 +0x28c
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyze(0x14002966700)
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:187 +0x96c
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func2()
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:105 +0x24
github.com/golangci/golangci-lint/pkg/timeutils.(*Stopwatch).TrackStage(0x14000120a00, {0x10314b191, 0x7}, 0x14001793730)
	github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:111 +0x48
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe(0x102d30e00?)
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:104 +0x78
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze.func2(0x14002966700)
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_loadingpackage.go:80 +0xb4
created by github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze
	github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_loadingpackage.go:75 +0x16c
WARN [runner] Can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "provider" (isInitialPkg: false, needAnalyzeSource: true): T
INFO [runner] processing took 2.624µs with stages: max_same_issues: 625ns, max_from_linter: 292ns, nolint: 250ns, cgo: 250ns, skip_files: 209ns, skip_dirs: 167ns, filename_unadjuster: 125ns, max_per_file_from_linter: 83ns, identifier_marker: 83ns, exclude: 83ns, path_shortener: 83ns, path_prettifier: 83ns, exclude-rules: 42ns, severity-rules: 42ns, path_prefixer: 42ns, uniq_by_line: 42ns, autogenerated_exclude: 41ns, source_code: 41ns, sort_results: 41ns, diff: 0s
INFO [runner] linters took 4.732210875s with stages: goanalysis_metalinter: 4.732177375s
ERRO Running error: 1 error occurred:
	* can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "provider" (isInitialPkg: false, needAnalyzeSource: true): T

INFO Memory: 62 samples, avg is 585.2MB, max is 854.8MB
INFO Execution took 6.060550333s

Code example or link to a public repository

Code is here: evcc-io/evcc#2116

@andig andig added the bug Something isn't working label Mar 20, 2022
@ldez
Copy link
Member

ldez commented Mar 20, 2022

Hello,

As I explained here and here, if you are using generics you have to set the following configuration:

run:
    go: 1.18

https://golangci-lint.run/usage/configuration/#run-configuration

@ldez ldez closed this as completed Mar 20, 2022
@ldez ldez added question Further information is requested and removed bug Something isn't working labels Mar 20, 2022
@andig
Copy link
Author

andig commented Mar 21, 2022

@ldez I have now specified as requested but panic remains the same:

run:
  go: 1.18
issues:
  exclude:
  - .regActualCurrent. is unused
  - "`routeLogger` is unused"

Reopen?

@ldez
Copy link
Member

ldez commented Mar 21, 2022

Your panic (in the description and in your CI) is related to staticcheck (honnef.co/go/tools), staticcheck is disabled when you set go: 1.18.

So check your setup, and provide your stack if you still have the same problem.

@andig
Copy link
Author

andig commented Mar 21, 2022

Sorry for the noise. I had renamed golangci.yaml to golangci-lint.yaml and it wasn't picked up.

I've also noticed that structcheck returns amounts of false is unused positives now- new issue?

@ldez
Copy link
Member

ldez commented Mar 21, 2022

I've also noticed that structcheck returns amounts of false is unused positives now- new issue?

It's already fixed but not available for now. #2666

@wafer-bw
Copy link

wafer-bw commented Apr 6, 2022

To those experiencing this issue on go1.17 try changing uses: golangci/golangci-lint-action@v2 to uses: golangci/golangci-lint-action@v3 and make sure you're using >= version: v1.45

@muir
Copy link

muir commented Apr 20, 2022

If you're not using a config file, adding --go=1.18 seems to work around the issue:

golangci-lint run --go=1.18

Of course, that turns off a bunch of linters. Is there a way to pretend to use go 1.17 for linting purposes?

@ldez
Copy link
Member

ldez commented Apr 21, 2022

@muir everything is explained here: #2649

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants