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]