// +build ignore package main // Demonstration of directionality of flow edges. func f1() {} func f2() {} var somepred bool // Tracking functions. func flow1() { s := f1 p := f2 q := p r := q if somepred { r = s } print(s) // @pointsto main.f1 print(p) // @pointsto main.f2 print(q) // @pointsto main.f2 print(r) // @pointsto main.f1 | main.f2 } // Tracking concrete types in interfaces. func flow2() { var s interface{} = 1 var p interface{} = "foo" q := p r := q if somepred { r = s } print(s) // @types int print(p) // @types string print(q) // @types string print(r) // @types int | string } var g1, g2 int // Tracking addresses of globals. func flow3() { s := &g1 p := &g2 q := p r := q if somepred { r = s } print(s) // @pointsto main.g1 print(p) // @pointsto main.g2 print(q) // @pointsto main.g2 print(r) // @pointsto main.g2 | main.g1 } func main() { flow1() flow2() flow3() }