37 lines
		
	
	
		
			902 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			902 B
		
	
	
	
		
			Go
		
	
	
	
| // +build ignore
 | |
| 
 | |
| package main
 | |
| 
 | |
| var unknown bool
 | |
| 
 | |
| type S string
 | |
| 
 | |
| func incr(x int) int { return x + 1 }
 | |
| 
 | |
| func main() {
 | |
| 	var i interface{}
 | |
| 	i = 1
 | |
| 	if unknown {
 | |
| 		i = S("foo")
 | |
| 	}
 | |
| 	if unknown {
 | |
| 		i = (func(int, int))(nil) // NB type compares equal to that below.
 | |
| 	}
 | |
| 	// Look, the test harness can handle equal-but-not-String-equal
 | |
| 	// types because we parse types and using a typemap.
 | |
| 	if unknown {
 | |
| 		i = (func(x int, y int))(nil)
 | |
| 	}
 | |
| 	if unknown {
 | |
| 		i = incr
 | |
| 	}
 | |
| 	print(i) // @types int | S | func(int, int) | func(int) int
 | |
| 
 | |
| 	// NB, an interface may never directly alias any global
 | |
| 	// labels, even though it may contain pointers that do.
 | |
| 	print(i)                 // @pointsto makeinterface:func(x int) int | makeinterface:func(x int, y int) | makeinterface:func(int, int) | makeinterface:int | makeinterface:main.S
 | |
| 	print(i.(func(int) int)) // @pointsto main.incr
 | |
| 
 | |
| 	print() // regression test for crash
 | |
| }
 |