52 lines
		
	
	
		
			946 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			946 B
		
	
	
	
		
			Go
		
	
	
	
// +build ignore
 | 
						|
 | 
						|
package main
 | 
						|
 | 
						|
// Test of maps.
 | 
						|
 | 
						|
var a, b, c int
 | 
						|
 | 
						|
func maps1() {
 | 
						|
	m1 := map[*int]*int{&a: &b} // @line m1m1
 | 
						|
	m2 := make(map[*int]*int)   // @line m1m2
 | 
						|
	m2[&b] = &a
 | 
						|
 | 
						|
	print(m1[nil]) // @pointsto main.b | main.c
 | 
						|
	print(m2[nil]) // @pointsto main.a
 | 
						|
 | 
						|
	print(m1) // @pointsto makemap@m1m1:21
 | 
						|
	print(m2) // @pointsto makemap@m1m2:12
 | 
						|
 | 
						|
	m1[&b] = &c
 | 
						|
 | 
						|
	for k, v := range m1 {
 | 
						|
		print(k) // @pointsto main.a | main.b
 | 
						|
		print(v) // @pointsto main.b | main.c
 | 
						|
	}
 | 
						|
 | 
						|
	for k, v := range m2 {
 | 
						|
		print(k) // @pointsto main.b
 | 
						|
		print(v) // @pointsto main.a
 | 
						|
	}
 | 
						|
 | 
						|
	// Lookup doesn't create any aliases.
 | 
						|
	print(m2[&c]) // @pointsto main.a
 | 
						|
	if _, ok := m2[&a]; ok {
 | 
						|
		print(m2[&c]) // @pointsto main.a
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func maps2() {
 | 
						|
	m1 := map[*int]*int{&a: &b}
 | 
						|
	m2 := map[*int]*int{&b: &c}
 | 
						|
	_ = []map[*int]*int{m1, m2} // (no spurious merging of m1, m2)
 | 
						|
 | 
						|
	print(m1[nil]) // @pointsto main.b
 | 
						|
	print(m2[nil]) // @pointsto main.c
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	maps1()
 | 
						|
	maps2()
 | 
						|
}
 |