| Test copylock at go version go1.22. |
| |
| -- go.mod -- |
| module golang.org/fake/forstmt |
| |
| go 1.22 |
| -- pre.go -- |
| //go:build go1.21 |
| |
| package forstmt |
| |
| import "sync" |
| |
| func InGo21(l []int) { |
| var mu sync.Mutex |
| var x int |
| |
| for x, mu = 0, (sync.Mutex{}); x < 10; x++ { // Not reported on '='. |
| } |
| for x, mu := 0, (sync.Mutex{}); x < 10; x++ { // Not reported before 1.22. |
| _ = mu.TryLock() |
| } |
| for x, _ := 0, (sync.Mutex{}); x < 10; x++ { // Not reported due to '_'. |
| _ = mu.TryLock() |
| } |
| for _, mu := 0, (sync.Mutex{}); x < 10; x++ { // Not reported before 1.22. |
| _ = mu.TryLock() |
| } |
| } |
| -- go22.go -- |
| //go:build go1.22 |
| |
| package forstmt |
| |
| import "sync" |
| |
| func InGo22(l []int) { |
| var mu sync.Mutex |
| var x int |
| |
| for x, mu = 0, (sync.Mutex{}); x < 10; x++ { // Not reported on '='. |
| } |
| for x, mu := 0, (sync.Mutex{}); x < 10; x++ { // want "for loop iteration copies lock value to mu: sync.Mutex" |
| _ = mu.TryLock() |
| } |
| for x, _ := 0, (sync.Mutex{}); x < 10; x++ { // Not reported due to '_'. |
| _ = mu.TryLock() |
| } |
| for _, mu := 0, (sync.Mutex{}); x < 10; x++ { // want "for loop iteration copies lock value to mu: sync.Mutex" |
| _ = mu.TryLock() |
| } |
| } |
| -- modver.go -- |
| package forstmt |
| |
| import "sync" |
| |
| func InGo22ByModuleVersion(l []int) { |
| var mu sync.Mutex |
| var x int |
| |
| for x, mu = 0, (sync.Mutex{}); x < 10; x++ { // Not reported on '='. |
| } |
| for x, mu := 0, (sync.Mutex{}); x < 10; x++ { // want "for loop iteration copies lock value to mu: sync.Mutex" |
| _ = mu.TryLock() |
| } |
| for x, _ := 0, (sync.Mutex{}); x < 10; x++ { // Not reported due to '_'. |
| _ = mu.TryLock() |
| } |
| for _, mu := 0, (sync.Mutex{}); x < 10; x++ { // want "for loop iteration copies lock value to mu: sync.Mutex" |
| _ = mu.TryLock() |
| } |
| } |
| -- assign.go -- |
| //go:build go1.22 |
| |
| package forstmt |
| |
| import "sync" |
| |
| func ReportAssign(l []int) { |
| // Test we do not report a duplicate if the assignment is reported. |
| var mu sync.Mutex |
| for x, mu := 0, mu; x < 10; x++ { // want "assignment copies lock value to mu: sync.Mutex" |
| _ = mu.TryLock() |
| } |
| } |