Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / go / pointer / testdata / another.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/go/pointer/testdata/another.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/go/pointer/testdata/another.go
new file mode 100644 (file)
index 0000000..12ed690
--- /dev/null
@@ -0,0 +1,36 @@
+// +build ignore
+
+package main
+
+var unknown bool
+
+type S string
+
+func incr(x int) int { return x + 1 }
+
+func main() {
+       var i interface{}
+       i = 1
+       if unknown {
+               i = S("foo")
+       }
+       if unknown {
+               i = (func(int, int))(nil) // NB type compares equal to that below.
+       }
+       // Look, the test harness can handle equal-but-not-String-equal
+       // types because we parse types and using a typemap.
+       if unknown {
+               i = (func(x int, y int))(nil)
+       }
+       if unknown {
+               i = incr
+       }
+       print(i) // @types int | S | func(int, int) | func(int) int
+
+       // NB, an interface may never directly alias any global
+       // labels, even though it may contain pointers that do.
+       print(i)                 // @pointsto makeinterface:func(x int) int | makeinterface:func(x int, y int) | makeinterface:func(int, int) | makeinterface:int | makeinterface:main.S
+       print(i.(func(int) int)) // @pointsto main.incr
+
+       print() // regression test for crash
+}