mirror of
https://github.com/golang/go
synced 2024-11-19 00:14:39 -07:00
30 lines
651 B
Go
30 lines
651 B
Go
|
package main
|
||
|
|
||
|
// Regression test for oracle 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
|
||
|
}
|