Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / go / pointer / testdata / flow.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/pointer/testdata/flow.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/pointer/testdata/flow.go
new file mode 100644 (file)
index 0000000..6fb599e
--- /dev/null
@@ -0,0 +1,63 @@
+// +build ignore
+
+package main
+
+// Demonstration of directionality of flow edges.
+
+func f1() {}
+func f2() {}
+
+var somepred bool
+
+// Tracking functions.
+func flow1() {
+       s := f1
+       p := f2
+       q := p
+       r := q
+       if somepred {
+               r = s
+       }
+       print(s) // @pointsto main.f1
+       print(p) // @pointsto main.f2
+       print(q) // @pointsto main.f2
+       print(r) // @pointsto main.f1 | main.f2
+}
+
+// Tracking concrete types in interfaces.
+func flow2() {
+       var s interface{} = 1
+       var p interface{} = "foo"
+       q := p
+       r := q
+       if somepred {
+               r = s
+       }
+       print(s) // @types int
+       print(p) // @types string
+       print(q) // @types string
+       print(r) // @types int | string
+}
+
+var g1, g2 int
+
+// Tracking addresses of globals.
+func flow3() {
+       s := &g1
+       p := &g2
+       q := p
+       r := q
+       if somepred {
+               r = s
+       }
+       print(s) // @pointsto main.g1
+       print(p) // @pointsto main.g2
+       print(q) // @pointsto main.g2
+       print(r) // @pointsto main.g2 | main.g1
+}
+
+func main() {
+       flow1()
+       flow2()
+       flow3()
+}