1 | package main |
---|---|
2 | |
3 | // Regression test for guru crash |
4 | // https://code.google.com/p/go/issues/detail?id=6605 |
5 | // |
6 | // Using reflection, methods may be called on types that are not the |
7 | // operand of any ssa.MakeInterface instruction. In this example, |
8 | // (Y).F is called by deriving the type Y from *Y. Prior to the fix, |
9 | // no RTTI (or method set) for type Y was included in the program, so |
10 | // the F() call would crash. |
11 | |
12 | import "reflect" |
13 | |
14 | var a int |
15 | |
16 | type X struct{} |
17 | |
18 | func (X) F() *int { |
19 | return &a |
20 | } |
21 | |
22 | type I interface { |
23 | F() *int |
24 | } |
25 | |
26 | func main() { |
27 | type Y struct{ X } |
28 | print(reflect.Indirect(reflect.ValueOf(new(Y))).Interface().(I).F()) // @pointsto command-line-arguments.a |
29 | } |
30 |