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