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

Panic, from staticcheck #2859

Closed
4 tasks done
sukki37 opened this issue May 17, 2022 · 14 comments · Fixed by #2976
Closed
4 tasks done

Panic, from staticcheck #2859

sukki37 opened this issue May 17, 2022 · 14 comments · Fixed by #2976
Assignees
Labels
bug Something isn't working dependencies Relates to an upstream dependency

Comments

@sukki37
Copy link

sukki37 commented May 17, 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

golangci-lint run --disable-all -E staticcheck ./...
ERRO [runner] Panic: buildir: package "shuffle" (isInitialPkg: true, needAnalyzeSource: true): in github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.init: cannot convert github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLengthShuffle (func[T github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLength](vs []T, ws []T, sels []int64) []T) to func(vs []int8, ws []int8, sels []int64) []int8: goroutine 25269 [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({0x10304c6a0, 0x1400f242950})
        runtime/panic.go:838 +0x204
honnef.co/go/tools/go/ir.emitConv(0x14008c66b40, {0x1031cab98, 0x14008c66c80}, {0x1031c0d80?, 0x1400ca5c8c0}, {0x0, 0x0})
        honnef.co/go/tools@v0.3.1/go/ir/emit.go:293 +0xb0c
honnef.co/go/tools/go/ir.emitStore(0x14008c66b40, {0x1031cac68, 0x1400bdff220}, {0x1031cab98, 0x14008c66c80}, {0x0, 0x0})
        honnef.co/go/tools@v0.3.1/go/ir/emit.go:302 +0x68
honnef.co/go/tools/go/ir.(*address).store(0x14007300f40, 0x14008c66b40?, {0x1031cab98?, 0x14008c66c80?}, {0x0?, 0x0?})
        honnef.co/go/tools@v0.3.1/go/ir/lvalue.go:37 +0x5c
honnef.co/go/tools/go/ir.(*builder).assign(0x103088b80?, 0x14011ac4930?, {0x1031c6050, 0x14007300f40}, {0x1031c3be0?, 0x1401564dbf0?}, 0x0?, 0x0, {0x0, 0x0})
        honnef.co/go/tools@v0.3.1/go/ir/builder.go:542 +0x628
honnef.co/go/tools/go/ir.(*Package).build(0x14016ad55f0)
        honnef.co/go/tools@v0.3.1/go/ir/builder.go:2568 +0x90c
sync.(*Once).doSlow(0x1400b7860e0?, 0x1400bdc20f0?)
        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.3.1/go/ir/builder.go:2505
honnef.co/go/tools/internal/passes/buildir.run(0x1401336c8f0)
        honnef.co/go/tools@v0.3.1/internal/passes/buildir/buildir.go:86 +0x28c
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyze(0x140058ff3d0)
        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(0x14001c79860, {0x102d7b99c, 0x7}, 0x14002ea2730)
        github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:111 +0x48
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe(0x10296a640?)
        github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:104 +0x78
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze.func2(0x140058ff3d0)
        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 staticcheck: staticcheck: buildir: package "shuffle" (isInitialPkg: true, needAnalyzeSource: true): in github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.init: cannot convert github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLengthShuffle (func[T github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLength](vs []T, ws []T, sels []int64) []T) to func(vs []int8, ws []int8, sels []int64) []int8 
ERRO Running error: 1 error occurred:
        * can't run linter staticcheck: staticcheck: buildir: package "shuffle" (isInitialPkg: true, needAnalyzeSource: true): in github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.init: cannot convert github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLengthShuffle (func[T github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLength](vs []T, ws []T, sels []int64) []T) to func(vs []int8, ws []int8, sels []int64) []int8

Version of golangci-lint

golangci-lint --version                             
golangci-lint has version 1.46.1 built from 044f0a17 on 2022-05-12T09:23:45Z

Configuration file

no .golongci.yml, only enable staticcheck by command line.

$ cat .golangci.yml
# paste output here

Go environment

go version go1.18.1 darwin/arm64
GO111MODULE="on"
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/maomao/Library/Caches/go-build"
GOENV="/Users/maomao/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/maomao/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/maomao/go"
GOPRIVATE=""
GOPROXY="https://mirrors.tencent.com/go,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.18.1"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/maomao/code/matrixone/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/v4/9c736kps76jbbvf97snf3s9w0000gn/T/go-build2062840899=/tmp/go-build -gno-record-gcc-switches -fno-common"

Verbose output of running

INFO [config_reader] Config search paths: [./ /Users/maomao/code/matrixone /Users/maomao/code /Users/maomao /Users /] 
INFO [lintersdb] Active 1 linters: [staticcheck]  
INFO [loader] Go packages loading at mode 575 (files|imports|types_sizes|compiled_files|deps|exports_file|name) took 1.702499333s 
INFO [runner/filename_unadjuster] Pre-built 2 adjustments in 94.23975ms 
INFO [linters context/goanalysis] analyzers took 1m14.602552617s with top 10 stages: buildir: 32.000991883s, fact_purity: 2.532383466s, nilness: 2.500163266s, typedness: 2.372219817s, fact_deprecated: 2.121536948s, SA5012: 1.916474125s, SA1012: 1.229031041s, SA4030: 1.048752863s, SA1004: 1.005119633s, SA4023: 896.485827ms 
ERRO [runner] Panic: buildir: package "shuffle" (isInitialPkg: true, needAnalyzeSource: true): in github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.init: cannot convert github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLengthShuffle (func[T github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLength](vs []T, ws []T, sels []int64) []T) to func(vs []int8, ws []int8, sels []int64) []int8: goroutine 21455 [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({0x105a686a0, 0x1404bab2ac0})
        runtime/panic.go:838 +0x204
honnef.co/go/tools/go/ir.emitConv(0x14019ecc280, {0x105be6b98, 0x14019ecc3c0}, {0x105bdcd80?, 0x1405a52fd80}, {0x0, 0x0})
        honnef.co/go/tools@v0.3.1/go/ir/emit.go:293 +0xb0c
honnef.co/go/tools/go/ir.emitStore(0x14019ecc280, {0x105be6c68, 0x14041b78410}, {0x105be6b98, 0x14019ecc3c0}, {0x0, 0x0})
        honnef.co/go/tools@v0.3.1/go/ir/emit.go:302 +0x68
honnef.co/go/tools/go/ir.(*address).store(0x1404b2788c0, 0x14019ecc280?, {0x105be6b98?, 0x14019ecc3c0?}, {0x0?, 0x0?})
        honnef.co/go/tools@v0.3.1/go/ir/lvalue.go:37 +0x5c
honnef.co/go/tools/go/ir.(*builder).assign(0x105aa4b80?, 0x1405b0f0990?, {0x105be2050, 0x1404b2788c0}, {0x105bdfbe0?, 0x1405a175d10?}, 0x0?, 0x0, {0x0, 0x0})
        honnef.co/go/tools@v0.3.1/go/ir/builder.go:542 +0x628
honnef.co/go/tools/go/ir.(*Package).build(0x1405ba78bd0)
        honnef.co/go/tools@v0.3.1/go/ir/builder.go:2568 +0x90c
sync.(*Once).doSlow(0x1405a2275e0?, 0x1405a540370?)
        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.3.1/go/ir/builder.go:2505
honnef.co/go/tools/internal/passes/buildir.run(0x1405a547ad0)
        honnef.co/go/tools@v0.3.1/internal/passes/buildir/buildir.go:86 +0x28c
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyze(0x14005983550)
        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(0x14002155770, {0x10579799c, 0x7}, 0x140026b2f30)
        github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:111 +0x48
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe(0x105386640?)
        github.com/golangci/golangci-lint/pkg/golinters/goanalysis/runner_action.go:104 +0x78
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze.func2(0x14005983550)
        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 staticcheck: staticcheck: buildir: package "shuffle" (isInitialPkg: true, needAnalyzeSource: true): in github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.init: cannot convert github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLengthShuffle (func[T github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLength](vs []T, ws []T, sels []int64) []T) to func(vs []int8, ws []int8, sels []int64) []int8 
INFO [runner] processing took 6.625µs with stages: skip_dirs: 1.709µs, nolint: 1.667µs, max_same_issues: 1.541µs, max_from_linter: 458ns, cgo: 334ns, max_per_file_from_linter: 250ns, uniq_by_line: 167ns, path_prettifier: 125ns, filename_unadjuster: 125ns, sort_results: 42ns, path_prefixer: 42ns, source_code: 42ns, identifier_marker: 41ns, skip_files: 41ns, severity-rules: 41ns, exclude: 0s, diff: 0s, autogenerated_exclude: 0s, exclude-rules: 0s, path_shortener: 0s 
INFO [runner] linters took 10.61532175s with stages: staticcheck: 10.613429875s 
ERRO Running error: 1 error occurred:
        * can't run linter staticcheck: staticcheck: buildir: package "shuffle" (isInitialPkg: true, needAnalyzeSource: true): in github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.init: cannot convert github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLengthShuffle (func[T github.com/matrixorigin/matrixone/pkg/vectorize/shuffle.fixedLength](vs []T, ws []T, sels []int64) []T) to func(vs []int8, ws []int8, sels []int64) []int8
 
INFO Memory: 125 samples, avg is 1374.6MB, max is 4159.3MB 
INFO Execution took 12.429372958s                 

Code example or link to a public repository

https://github.com/matrixorigin/matrixone

@sukki37 sukki37 added the bug Something isn't working label May 17, 2022
@boring-cyborg
Copy link

boring-cyborg bot commented May 17, 2022

Hey, thank you for opening your first Issue ! 🙂 If you would like to contribute we have a guide for contributors.

@ldez ldez added the dependencies Relates to an upstream dependency label May 17, 2022
@ldez
Copy link
Member

ldez commented May 17, 2022

Hello,

The problem seems to only affect staticcheck inside golangci-lint, the standalone binary of staticcheck seems to work.
We need to investigate.

@dominikh
Copy link

A quick glance tells me that golangci-lint doesn't populate types.Info.Instances.

@sukki37
Copy link
Author

sukki37 commented May 20, 2022

Hello,

The problem seems to only affect staticcheck inside golangci-lint, the standalone binary of staticcheck seems to work. We need to investigate.

Hi, how is this issue going?

@metalmatze
Copy link

Not sure if this is super helpful, but maybe for testing a fix.
The same issue arises when running v1.46.2 against: github.com/segmentio/parquet-go

WARN [runner] Can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "parquet" (isInitialPkg: false, needAnalyzeSource: true): in github.com/segmentio/parquet-go.nullIndexFuncOf: cannot convert github.com/segmentio/parquet-go.nullIndex (func[T comparable](a github.com/segmentio/parquet-go.array) int) to github.com/segmentio/parquet-go.nullIndexFunc 

@erikgeiser
Copy link

I believe I've encoutered the same issue with goanalysis_metalinter running v1.46.2 against https://github.com/erikgeiser/promptkit:

ERRO Running error: 1 error occurred:
	* can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "selection" (isInitialPkg: true, needAnalyzeSource: true): in github.com/erikgeiser/promptkit/selection.New: cannot convert github.com/erikgeiser/promptkit/selection.FilterContainsCaseInsensitive (func[T any](filter string, choice *github.com/erikgeiser/promptkit/selection.Choice[T]) bool) to func(filterText string, choice *github.com/erikgeiser/promptkit/selection.Choice[T]) bool

@forsaken628
Copy link

package main

type ColScan[T any] struct {
	Pick func(item *T) any
}

type Foo struct {
	A string
}

func main() {
	_ = ColScan[Foo]{
		Pick: Jointer[int, Foo],
	}
}

func Jointer[T, V any](*V) any {
	var z T
	return &z
}

ERRO [runner] Panic: buildir: package "main" (isInitialPkg: true, needAnalyzeSource: true): in xx/aaa.main: cannot convert xx/aaa.Jointer (funcT, V any any) to func(item *xx/aaa.Foo) any: goroutine 543 [running]:

@AlmogBaku AlmogBaku mentioned this issue Jun 11, 2022
13 tasks
@AlmogBaku
Copy link

Is anyone familiar with a workaround? or at least a temporary way to silence this error?

@ldez
Copy link
Member

ldez commented Jun 11, 2022

There is no other workaround than disabling staticcheck rules (staticcheck, gosimple, stylecheck, unused)

AlmogBaku added a commit to raptor-ml/streaming-runner that referenced this issue Jun 11, 2022
AlmogBaku added a commit to raptor-ml/raptor that referenced this issue Jun 11, 2022
@firelizzard18
Copy link
Contributor

I am running into this same issue on this commit. I updated to 1.46.2, disabled my custom rules, and ran go run github.com/golangci/golangci-lint/cmd/golangci-lint run. I get the following panic:

ERRO [runner] Panic: buildir: package "record" (isInitialPkg: true, needAnalyzeSource: true): in gitlab.com/accumulatenetwork/accumulate/internal/database/record.init: cannot convert gitlab.com/accumulatenetwork/accumulate/internal/database/record.copyValue (func[T any](v T) T) to func(uint64) uint64: goroutine 16309 [running]:
runtime/debug.Stack()
        /usr/lib/go/src/runtime/debug/stack.go:24 +0x65
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func1()
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/golinters/goanalysis/runner_action.go:101 +0x155
panic({0x13ef2c0, 0xc014c9b140})
        /usr/lib/go/src/runtime/panic.go:838 +0x207
honnef.co/go/tools/go/ir.emitConv(0xc0093f83c0, {0x18072f0, 0xc0093f9540}, {0x17fcaf0?, 0xc025c26640}, {0x17fc528, 0xc0216aedb0})
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/emit.go:293 +0xd29
honnef.co/go/tools/go/ir.emitStore(0xc0093f83c0, {0x1807220, 0xc01a3bbbc0}, {0x18072f0, 0xc0093f9540}, {0x17fc528, 0xc0216aedb0})
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/emit.go:302 +0x7f
honnef.co/go/tools/go/ir.(*address).store(0xc016ff20e0, 0xc01a3bbb00?, {0x18072f0?, 0xc0093f9540?}, {0x17fc528?, 0xc0216aedb0?})
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/lvalue.go:37 +0x53
honnef.co/go/tools/go/ir.(*storebuf).emit(0xc0093f83c0?, 0xc0093f83c0)
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:455 +0xeb
honnef.co/go/tools/go/ir.(*builder).addr(0xc029528420?, 0xc0093f83c0, {0x17ffb88?, 0xc038ac5e40}, 0x1)
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:344 +0x325
honnef.co/go/tools/go/ir.(*builder).expr0(0xc01c4b1a28, 0xc0093f83c0, {0x1800218?, 0xc0052660e0?}, {0x7, {0x17fcac8, 0xc01d1a4be0}, {0x0, 0x0}})
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:630 +0xf1
honnef.co/go/tools/go/ir.(*builder).expr(0x8?, 0xc0093f83c0, {0x1800218?, 0xc0052660e0?})
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:566 +0x1db
honnef.co/go/tools/go/ir.(*builder).assign(0xc001a1fb80?, 0x0?, {0x1802600, 0xc016ff20a0}, {0x1800218?, 0xc0052660e0?}, 0x20?, 0x0, {0x0, 0x0})
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:538 +0x605
honnef.co/go/tools/go/ir.(*Package).build(0xc00f2ee090)
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:2568 +0xac6
sync.(*Once).doSlow(0xc008ac42a0?, 0xc00165a5a0?)
        /usr/lib/go/src/sync/once.go:68 +0xc2
sync.(*Once).Do(...)
        /usr/lib/go/src/sync/once.go:59
honnef.co/go/tools/go/ir.(*Package).Build(...)
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/go/ir/builder.go:2505
honnef.co/go/tools/internal/passes/buildir.run(0xc020d02dd0)
        /home/firelizzard/go/pkg/mod/honnef.co/go/tools@v0.3.1/internal/passes/buildir/buildir.go:86 +0x368
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyze(0xc0027ad240)
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/golinters/goanalysis/runner_action.go:187 +0x9c4
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func2()
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/golinters/goanalysis/runner_action.go:105 +0x1d
github.com/golangci/golangci-lint/pkg/timeutils.(*Stopwatch).TrackStage(0xc001487b80, {0x159a919, 0x7}, 0xc0021cdf48)
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/timeutils/stopwatch.go:111 +0x4a
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe(0xc000bc7ce0?)
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/golinters/goanalysis/runner_action.go:104 +0x85
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze.func2(0xc0027ad240)
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/golinters/goanalysis/runner_loadingpackage.go:80 +0xb4
created by github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze
        /home/firelizzard/go/pkg/mod/github.com/golangci/golangci-lint@v1.46.2/pkg/golinters/goanalysis/runner_loadingpackage.go:75 +0x1eb 
WARN [runner] Can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "record" (isInitialPkg: true, needAnalyzeSource: true): in gitlab.com/accumulatenetwork/accumulate/internal/database/record.init: cannot convert gitlab.com/accumulatenetwork/accumulate/internal/database/record.copyValue (func[T any](v T) T) to func(uint64) uint64 
WARN [linters context] structcheck is disabled because of go1.18. You can track the evolution of the go1.18 support by following the https://github.com/golangci/golangci-lint/issues/2649. 
ERRO Running error: 1 error occurred:
        * can't run linter goanalysis_metalinter: goanalysis_metalinter: buildir: package "record" (isInitialPkg: true, needAnalyzeSource: true): in gitlab.com/accumulatenetwork/accumulate/internal/database/record.init: cannot convert gitlab.com/accumulatenetwork/accumulate/internal/database/record.copyValue (func[T any](v T) T) to func(uint64) uint64

@urso
Copy link

urso commented Jun 21, 2022

Another example:

package main

import "fmt"

func printGeneric[T any](v T) {
        fmt.Println(v)
}

func unused() {}

func main() {
        printInt := printGeneric[int] // This line seems to produce the panic in the linter

        printInt(1)
}

In some cases I managed to workaround the issue by wrapping the instantiation into a function. For example:

package main

import "fmt"

func printGeneric[T any](v T) {
        fmt.Println(v)
}

func unused() {}

func main() {
        // printInt := printGeneric[int]
        printInt := func(v int) {
                printGeneric(v)
        }

        printInt(1)
}

In this case the gosimple linter might complain about not using a "lambda", but at least no panic.

@firelizzard18
Copy link
Contributor

I've tracked this down to the fact that go/types.Info.Instances is nil. In my example above, when I run upstream staticcheck, on this line fn.Pkg.info.Instances has an entry for copyValue and thus makeInstance is called, which constructs and returns an instantiated generic function, which then succeeds later.

However when running within golangci-lint, that map is nil, so expr0 instead returns the uninstantiated generic function, which fails.

@firelizzard18
Copy link
Contributor

diff --git a/pkg/golinters/goanalysis/runner_loadingpackage.go b/pkg/golinters/goanalysis/runner_loadingpackage.go
index 1ac6b83e..a5b5cccf 100644
--- a/pkg/golinters/goanalysis/runner_loadingpackage.go
+++ b/pkg/golinters/goanalysis/runner_loadingpackage.go
@@ -123,6 +123,7 @@ func (lp *loadingPackage) loadFromSource(loadMode LoadMode) error {
 
        pkg.TypesInfo = &types.Info{
                Types:      make(map[ast.Expr]types.TypeAndValue),
+               Instances:  make(map[*ast.Ident]types.Instance),
                Defs:       make(map[*ast.Ident]types.Object),
                Uses:       make(map[*ast.Ident]types.Object),
                Implicits:  make(map[ast.Node]types.Object),

@firelizzard18
Copy link
Contributor

You can use my patch by adding replace github.com/golangci/golangci-lint v1.46.2 => github.com/firelizzard18/golangci-lint v1.46.3-0.20220713213035-328ba3e7213d to your go.mod.

turbolent added a commit to onflow/flow-emulator that referenced this issue Oct 11, 2022
AlmogBaku added a commit to raptor-ml/streaming-runner that referenced this issue Feb 6, 2023
refactor -> work against runtime

update dependency proto & change runtime port

fix port out of range

rename manifests "expression" to "pyexp"

update natun dep

replace the runtime pb to the monorepo

sha1 -> sha256

add headers

better logging

:bug: fix minor configuration bugs

:bug: add auth to grpc

:seedling: update deps

:bug: change proto dir in makefile

:seedling: update natun ver

:seedling: go mod tidy

:seedling: add missing header

:seedling: fix gh actions

:sparkles: update deps (& runtime api change)

:bug: fix bugs

:seedling: upgrade pyexp

:seedling: upgrade deps

:bug: temporarily disabling some lint checks
golangci/golangci-lint#2859

👻 rename org

Signed-off-by: AlmogBaku <almog.baku@gmail.com>

👻 rebrand

👻 add missing file

✨ update golang-lint

👻 raptor/raptorml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working dependencies Relates to an upstream dependency
Projects
None yet
Development

Successfully merging a pull request may close this issue.

9 participants