| 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 |
| } |