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