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

SSA and generics (go1.18) #41

Closed
Tracked by #2649
ldez opened this issue Mar 24, 2022 · 7 comments · Fixed by golangci/golangci-lint#3689
Closed
Tracked by #2649

SSA and generics (go1.18) #41

ldez opened this issue Mar 24, 2022 · 7 comments · Fixed by golangci/golangci-lint#3689

Comments

@ldez
Copy link
Contributor

ldez commented Mar 24, 2022

Currently, SSA is not working with generics.

So your linter produces a panic when it is used with generics.

There is an issue open about that in the Go repository: golang/go#48525

Inside golangci-lint, we have disabled your linters: golangci/golangci-lint#2649

You have 2 solutions:

  • waiting for a version of SSA that will support generics
  • dropping the SSA analyzers and using something else to analyze the code.

Related to golang/go#50558

@sanposhiho
Copy link
Owner

Hm, thanks for informing. wait for a new version of SSA.

@ldez
Copy link
Contributor Author

ldez commented Jul 19, 2022

SSA has been updated and it seems to work inside golangci-lint.

@ldez ldez closed this as completed Jul 19, 2022
@sanposhiho
Copy link
Owner

Thanks

@ldez
Copy link
Contributor Author

ldez commented Jul 19, 2022

in fact, the problem is still here

@ldez ldez reopened this Jul 19, 2022
@ldez
Copy link
Contributor Author

ldez commented Jul 19, 2022

The code of the linter needs to be adapted to manage generics:

func wastedassignG[T ~int](hoge T) {
	var i int
	for {
		hoge = 5 // <- not detected KO
		// break
	}

	println(i)
	println(hoge)
	return
}

func wastedassign(hoge int) {
	var i int
	for {
		hoge = 5 // <- detected OK
		// break
	}

	println(i)
	println(hoge)
	return
}

@ldez
Copy link
Contributor Author

ldez commented Jul 21, 2022

go1.19 will come in about 2 weeks, it can be good if you can fix your linter before this release.

@migregal
Copy link

Hi, everyone!

Is there any movement about go1.19 release? Actually, i can't reproduce that problem with new version:

main.go

package main

import "fmt"

func wastedassignG[T ~int](hoge T) {
	var i int
	for {
		i = 5
	}

	fmt.Println(i)
}

func wastedassign(hoge int) {
	var i int
	for {
		i = 5
	}

	fmt.Println(i)
}

func main() {

}

And it gives me this output:

$ go vet -vettool=`which wastedassign` ./main/...                                                                                          
# <path>/main
main/main.go:8:3: assigned to i, but reassigned without using the value
main/main.go:17:3: assigned to i, but reassigned without using the value

Seems like it was fixed and golangci-lint can reenable wastedassign?

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

Successfully merging a pull request may close this issue.

3 participants