mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/vet: don't treat fields like variables in rangeloop check
Fixes #13236 Change-Id: If902ac66718e0a0790fab9835921ce4ef980965b Reviewed-on: https://go-review.googlesource.com/21183 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
d170d3edd7
commit
4ffa5eb876
2 changed files with 13 additions and 0 deletions
|
|
@ -62,6 +62,10 @@ func checkRangeLoop(f *File, node ast.Node) {
|
||||||
if !ok || id.Obj == nil {
|
if !ok || id.Obj == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if f.pkg.types[id].Type == nil {
|
||||||
|
// Not referring to a variable
|
||||||
|
return true
|
||||||
|
}
|
||||||
if key != nil && id.Obj == key.Obj || val != nil && id.Obj == val.Obj {
|
if key != nil && id.Obj == key.Obj || val != nil && id.Obj == val.Obj {
|
||||||
f.Bad(id.Pos(), "range variable", id.Name, "captured by func literal")
|
f.Bad(id.Pos(), "range variable", id.Name, "captured by func literal")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
src/cmd/vet/testdata/rangeloop.go
vendored
9
src/cmd/vet/testdata/rangeloop.go
vendored
|
|
@ -56,4 +56,13 @@ func RangeLoopTests() {
|
||||||
_ = f // ERROR "range variable f captured by func literal"
|
_ = f // ERROR "range variable f captured by func literal"
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
type T struct {
|
||||||
|
v int
|
||||||
|
}
|
||||||
|
for _, v := range s {
|
||||||
|
go func() {
|
||||||
|
_ = T{v: 1}
|
||||||
|
_ = []int{v: 1} // ERROR "range variable v captured by func literal"
|
||||||
|
}()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue