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 / conv.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/conv.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/pointer/testdata/conv.go
new file mode 100644 (file)
index 0000000..692f0ce
--- /dev/null
@@ -0,0 +1,63 @@
+// +build ignore
+
+package main
+
+import "unsafe"
+
+var a int
+
+func conv1() {
+       // Conversions of channel direction.
+       ch := make(chan int)    // @line c1make
+       print((<-chan int)(ch)) // @pointsto makechan@c1make:12
+       print((chan<- int)(ch)) // @pointsto makechan@c1make:12
+}
+
+func conv2() {
+       // string -> []byte/[]rune conversion
+       s := "foo"
+       ba := []byte(s) // @line c2ba
+       ra := []rune(s) // @line c2ra
+       print(ba)       // @pointsto convert@c2ba:14
+       print(ra)       // @pointsto convert@c2ra:14
+}
+
+func conv3() {
+       // Conversion of same underlying types.
+       type PI *int
+       pi := PI(&a)
+       print(pi) // @pointsto main.a
+
+       pint := (*int)(pi)
+       print(pint) // @pointsto main.a
+
+       // Conversions between pointers to identical base types.
+       var y *PI = &pi
+       var x **int = (**int)(y)
+       print(*x) // @pointsto main.a
+       print(*y) // @pointsto main.a
+       y = (*PI)(x)
+       print(*y) // @pointsto main.a
+}
+
+func conv4() {
+       // Handling of unsafe.Pointer conversion is unsound:
+       // we lose the alias to main.a and get something like new(int) instead.
+       p := (*int)(unsafe.Pointer(&a)) // @line c2p
+       print(p)                        // @pointsto convert@c2p:13
+}
+
+// Regression test for b/8231.
+func conv5() {
+       type P unsafe.Pointer
+       var i *struct{}
+       _ = P(i)
+}
+
+func main() {
+       conv1()
+       conv2()
+       conv3()
+       conv4()
+       conv5()
+}