summaryrefslogtreecommitdiff
path: root/src/cmd/gc/obj.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-05-07 13:42:47 -0700
committerRuss Cox <rsc@golang.org>2009-05-07 13:42:47 -0700
commit8be34efb0628abc47c2a05969c2795df544fd873 (patch)
tree6b3287784cef6b9ee63ca440a069dfecdbd4971b /src/cmd/gc/obj.c
parentc836acdeb6033fe96fa7c2fe6e290817a2256c26 (diff)
downloadgolang-8be34efb0628abc47c2a05969c2795df544fd873.tar.gz
if a struct s contains an anonymous interface value
with method m, s.m() is ok and m now shows up in s's method set for interface runtime. see http://cl/28419-p2 for new test interface10.go. R=ken OCL=28420 CL=28423
Diffstat (limited to 'src/cmd/gc/obj.c')
-rw-r--r--src/cmd/gc/obj.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/cmd/gc/obj.c b/src/cmd/gc/obj.c
index e55e5def8..ee0fd53dc 100644
--- a/src/cmd/gc/obj.c
+++ b/src/cmd/gc/obj.c
@@ -206,7 +206,7 @@ dumpsigt(Type *progt, Type *ifacet, Type *rcvrt, Type *methodt, Sym *s)
// get receiver type for this particular method.
this = getthisx(f->type)->type->type;
- if(f->embedded != 2 && isptr[this->etype] && !isptr[progt->etype]) {
+ if(f->embedded != 2 && isptr[this->etype] && !isptr[progt->etype] && !isifacemethod(f)) {
// pointer receiver method but value method set.
// ignore.
if(debug['r'])
@@ -238,7 +238,7 @@ dumpsigt(Type *progt, Type *ifacet, Type *rcvrt, Type *methodt, Sym *s)
// but we can generate more efficient code
// using genembedtramp if all that is necessary
// is a pointer adjustment and a JMP.
- if(f->embedded && isptr[ifacet->etype])
+ if(f->embedded && isptr[ifacet->etype] && !isifacemethod(f))
genembedtramp(ifacet, a);
else
genwrapper(ifacet, f, a->sym);