30 lines
		
	
	
		
			649 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			649 B
		
	
	
	
		
			Go
		
	
	
	
package main
 | 
						|
 | 
						|
// Regression test for guru crash
 | 
						|
// https://code.google.com/p/go/issues/detail?id=6605
 | 
						|
//
 | 
						|
// Using reflection, methods may be called on types that are not the
 | 
						|
// operand of any ssa.MakeInterface instruction.  In this example,
 | 
						|
// (Y).F is called by deriving the type Y from *Y.  Prior to the fix,
 | 
						|
// no RTTI (or method set) for type Y was included in the program, so
 | 
						|
// the F() call would crash.
 | 
						|
 | 
						|
import "reflect"
 | 
						|
 | 
						|
var a int
 | 
						|
 | 
						|
type X struct{}
 | 
						|
 | 
						|
func (X) F() *int {
 | 
						|
	return &a
 | 
						|
}
 | 
						|
 | 
						|
type I interface {
 | 
						|
	F() *int
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	type Y struct{ X }
 | 
						|
	print(reflect.Indirect(reflect.ValueOf(new(Y))).Interface().(I).F()) // @pointsto main.a
 | 
						|
}
 |