Commit 2d32d367 authored by Cherry Zhang's avatar Cherry Zhang

reflect: add a test for Calling a Method of a direct interface type

Gccgo's implementation of direct interface types has bugs that
causes reflect Call of method from Type.Method fail. CL 175837
and CL 175798 fix the bug. This CL adds a test.

Change-Id: I4e5f2cb96304c1ac7be04ca6d2851bac52b8eb24
Reviewed-on: https://go-review.googlesource.com/c/go/+/175880
Run-TryBot: Cherry Zhang <cherryyz@google.com>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 3403ee52
......@@ -2298,6 +2298,39 @@ func TestVariadicMethodValue(t *testing.T) {
}
}
type DirectIfaceT struct {
p *int
}
func (d DirectIfaceT) M() int { return *d.p }
func TestDirectIfaceMethod(t *testing.T) {
x := 42
v := DirectIfaceT{&x}
typ := TypeOf(v)
m, ok := typ.MethodByName("M")
if !ok {
t.Fatalf("cannot find method M")
}
in := []Value{ValueOf(v)}
out := m.Func.Call(in)
if got := out[0].Int(); got != 42 {
t.Errorf("Call with value receiver got %d, want 42", got)
}
pv := &v
typ = TypeOf(pv)
m, ok = typ.MethodByName("M")
if !ok {
t.Fatalf("cannot find method M")
}
in = []Value{ValueOf(pv)}
out = m.Func.Call(in)
if got := out[0].Int(); got != 42 {
t.Errorf("Call with pointer receiver got %d, want 42", got)
}
}
// Reflect version of $GOROOT/test/method5.go
// Concrete types implementing M method.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment