github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gotools/go/pointer/testdata/maps.go (about) 1 // +build ignore 2 3 package main 4 5 // Test of maps. 6 7 var a, b, c int 8 9 func maps1() { 10 m1 := map[*int]*int{&a: &b} // @line m1m1 11 m2 := make(map[*int]*int) // @line m1m2 12 m2[&b] = &a 13 14 print(m1[nil]) // @pointsto main.b | main.c 15 print(m2[nil]) // @pointsto main.a 16 17 print(m1) // @pointsto makemap@m1m1:21 18 print(m2) // @pointsto makemap@m1m2:12 19 20 m1[&b] = &c 21 22 for k, v := range m1 { 23 print(k) // @pointsto main.a | main.b 24 print(v) // @pointsto main.b | main.c 25 } 26 27 for k, v := range m2 { 28 print(k) // @pointsto main.b 29 print(v) // @pointsto main.a 30 } 31 32 // Lookup doesn't create any aliases. 33 print(m2[&c]) // @pointsto main.a 34 if _, ok := m2[&a]; ok { 35 print(m2[&c]) // @pointsto main.a 36 } 37 } 38 39 func maps2() { 40 m1 := map[*int]*int{&a: &b} 41 m2 := map[*int]*int{&b: &c} 42 _ = []map[*int]*int{m1, m2} // (no spurious merging of m1, m2) 43 44 print(m1[nil]) // @pointsto main.b 45 print(m2[nil]) // @pointsto main.c 46 } 47 48 func main() { 49 maps1() 50 maps2() 51 }