From: Ian Lance Taylor Date: Wed, 8 May 2019 04:39:19 +0000 (+0000) Subject: reflect: correctly handle direct interface typed receiver in Value.call X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b65b77cc80885f72f710da4134f05fc6b12fc8c5;p=gcc.git reflect: correctly handle direct interface typed receiver in Value.call A direct interface type's value method takes value receiver now. Don't pass pointer to the method function. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/175798 From-SVN: r271000 --- diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index ed95dfd481d..27e770cc60a 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -e3ba8828baf60343316bb68002e94570ee63ad1e +fcbf847c3bf76fb475c9020e1c57057134407263 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/reflect/value.go b/libgo/go/reflect/value.go index d3a6243f95d..298fbacf364 100644 --- a/libgo/go/reflect/value.go +++ b/libgo/go/reflect/value.go @@ -401,7 +401,7 @@ func (v Value) call(op string, in []Value) []Value { if v.flag&flagMethod != 0 { nin++ } - firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0 + firstPointer := len(in) > 0 && ifaceIndir(t.In(0).common()) && v.flag&flagMethodFn != 0 params := make([]unsafe.Pointer, nin) off := 0 if v.flag&flagMethod != 0 {