.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.0 / go / analysis / passes / loopclosure / testdata / src / a / a.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.0/go/analysis/passes/loopclosure/testdata/src/a/a.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.0/go/analysis/passes/loopclosure/testdata/src/a/a.go
new file mode 100644 (file)
index 0000000..e1f7bad
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file contains tests for the loopclosure checker.
+
+package testdata
+
+func _() {
+       var s []int
+       for i, v := range s {
+               go func() {
+                       println(i) // want "loop variable i captured by func literal"
+                       println(v) // want "loop variable v captured by func literal"
+               }()
+       }
+       for i, v := range s {
+               defer func() {
+                       println(i) // want "loop variable i captured by func literal"
+                       println(v) // want "loop variable v captured by func literal"
+               }()
+       }
+       for i := range s {
+               go func() {
+                       println(i) // want "loop variable i captured by func literal"
+               }()
+       }
+       for _, v := range s {
+               go func() {
+                       println(v) // want "loop variable v captured by func literal"
+               }()
+       }
+       for i, v := range s {
+               go func() {
+                       println(i, v)
+               }()
+               println("unfortunately, we don't catch the error above because of this statement")
+       }
+       for i, v := range s {
+               go func(i, v int) {
+                       println(i, v)
+               }(i, v)
+       }
+       for i, v := range s {
+               i, v := i, v
+               go func() {
+                       println(i, v)
+               }()
+       }
+       // If the key of the range statement is not an identifier
+       // the code should not panic (it used to).
+       var x [2]int
+       var f int
+       for x[0], f = range s {
+               go func() {
+                       _ = f // want "loop variable f captured by func literal"
+               }()
+       }
+       type T struct {
+               v int
+       }
+       for _, v := range s {
+               go func() {
+                       _ = T{v: 1}
+                       _ = map[int]int{v: 1} // want "loop variable v captured by func literal"
+               }()
+       }
+
+       // ordinary for-loops
+       for i := 0; i < 10; i++ {
+               go func() {
+                       print(i) // want "loop variable i captured by func literal"
+               }()
+       }
+       for i, j := 0, 1; i < 100; i, j = j, i+j {
+               go func() {
+                       print(j) // want "loop variable j captured by func literal"
+               }()
+       }
+       type cons struct {
+               car int
+               cdr *cons
+       }
+       var head *cons
+       for p := head; p != nil; p = p.cdr {
+               go func() {
+                       print(p.car) // want "loop variable p captured by func literal"
+               }()
+       }
+}