+++ /dev/null
-// +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()
-}