github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/pointer/testdata/typeparams.go (about) 1 //go:build ignore 2 // +build ignore 3 4 package main 5 6 import ( 7 "fmt" 8 "os" 9 ) 10 11 type S[T any] struct{ t T } 12 13 var theSint S[int] 14 var theSbool S[bool] 15 16 func (s *S[T]) String() string { 17 print(s) // @pointsto command-line-arguments.theSbool | command-line-arguments.theSint 18 return "" 19 } 20 21 func Type[T any]() { 22 var x *T 23 print(x) // @types *int | *bool 24 } 25 26 func Caller[T any]() { 27 var s *S[T] 28 _ = s.String() 29 } 30 31 var a int 32 var b bool 33 34 type t[T any] struct { 35 a *map[string]chan *T 36 } 37 38 func fn[T any](a *T) { 39 m := make(map[string]chan *T) 40 m[""] = make(chan *T, 1) 41 m[""] <- a 42 x := []t[T]{t[T]{a: &m}} 43 print(x) // @pointstoquery <-(*x[i].a)[key] command-line-arguments.a | command-line-arguments.b 44 } 45 46 func main() { 47 // os.Args is considered intrinsically allocated, 48 // but may also be set explicitly (e.g. on Windows), hence '...'. 49 print(os.Args) // @pointsto <command-line args> | ... 50 fmt.Println("Hello!", &theSint) 51 fmt.Println("World!", &theSbool) 52 53 Type[int]() // call 54 f := Type[bool] // call through a variable 55 _ = Type[string] // not called so will not appear in Type's print. 56 f() 57 58 Caller[int]() 59 Caller[bool]() 60 61 fn(&a) 62 fn(&b) 63 } 64 65 // @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S[int]).String[int] 66 // @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S[bool]).String[bool] 67 // @calls command-line-arguments.Caller[int] -> (*command-line-arguments.S[int]).String[int] 68 // @calls command-line-arguments.Caller[bool] -> (*command-line-arguments.S[bool]).String[bool]