diff options
author | Russ Cox <rsc@golang.org> | 2009-05-07 13:42:47 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-05-07 13:42:47 -0700 |
commit | 8be34efb0628abc47c2a05969c2795df544fd873 (patch) | |
tree | 6b3287784cef6b9ee63ca440a069dfecdbd4971b /src/cmd/gc/obj.c | |
parent | c836acdeb6033fe96fa7c2fe6e290817a2256c26 (diff) | |
download | golang-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.c | 4 |
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); |