X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=.config%2Fcoc%2Fextensions%2Fcoc-go-data%2Ftools%2Fpkg%2Fmod%2Fgolang.org%2Fx%2Ftools%40v0.0.0-20201105173854-bc9fc8d8c4bc%2Fcmd%2Fguru%2Ftestdata%2Fsrc%2Fpointsto%2Fmain.go;fp=.config%2Fcoc%2Fextensions%2Fcoc-go-data%2Ftools%2Fpkg%2Fmod%2Fgolang.org%2Fx%2Ftools%40v0.0.0-20201105173854-bc9fc8d8c4bc%2Fcmd%2Fguru%2Ftestdata%2Fsrc%2Fpointsto%2Fmain.go;h=c4ba2e258f48b1aa90139b5898c390f0259efa12;hb=4d07c77cf4d78cab8639e13ddc3c22495e585b0b;hp=0000000000000000000000000000000000000000;hpb=b3950616b54221c40a7dab9099bda675007e5b6e;p=dotfiles%2F.git diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/guru/testdata/src/pointsto/main.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/guru/testdata/src/pointsto/main.go new file mode 100644 index 00000000..c4ba2e25 --- /dev/null +++ b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/guru/testdata/src/pointsto/main.go @@ -0,0 +1,75 @@ +package main + +// Tests of 'pointsto' query. +// See go.tools/guru/guru_test.go for explanation. +// See pointsto.golden for expected query results. + +const pi = 3.141 // @pointsto const "pi" + +var global = new(string) // NB: ssa.Global is indirect, i.e. **string + +func main() { + livecode() + + // func objects + _ = main // @pointsto func-ref-main "main" + _ = (*C).f // @pointsto func-ref-*C.f "..C..f" + _ = D.f // @pointsto func-ref-D.f "D.f" + _ = I.f // @pointsto func-ref-I.f "I.f" + var d D + var i I + _ = d.f // @pointsto func-ref-d.f "d.f" + _ = i.f // @pointsto func-ref-i.f "i.f" + + // var objects + anon := func() { + _ = d.f // @pointsto ref-lexical-d.f "d.f" + } + _ = anon // @pointsto ref-anon "anon" + _ = global // @pointsto ref-global "global" + + // SSA affords some local flow sensitivity. + var a, b int + var x = &a // @pointsto var-def-x-1 "x" + _ = x // @pointsto var-ref-x-1 "x" + x = &b // @pointsto var-def-x-2 "x" + _ = x // @pointsto var-ref-x-2 "x" + + i = new(C) // @pointsto var-ref-i-C "i" + if i != nil { + i = D{} // @pointsto var-ref-i-D "i" + } + print(i) // @pointsto var-ref-i "\\bi\\b" + + m := map[string]*int{"a": &a} + mapval, _ := m["a"] // @pointsto map-lookup,ok "m..a.." + _ = mapval // @pointsto mapval "mapval" + _ = m // @pointsto m "m" + + if false { + panic(3) // @pointsto builtin-panic "panic" + } + + // NB: s.f is addressable per (*ssa.Program).VarValue, + // but our query concerns the object, not its address. + s := struct{ f interface{} }{f: make(chan bool)} + print(s.f) // @pointsto var-ref-s-f "s.f" +} + +func livecode() {} // @pointsto func-live "livecode" + +func deadcode() { // @pointsto func-dead "deadcode" + // Pointer analysis can't run on dead code. + var b = new(int) // @pointsto b "b" + _ = b +} + +type I interface { + f() +} + +type C int +type D struct{} + +func (c *C) f() {} +func (d D) f() {}