diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index a60018be0f..0280c965c9 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -1211,6 +1211,7 @@ void dumptypestructs(void); Type* methodfunc(Type *f, Type*); Node* typename(Type *t); Sym* typesym(Type *t); +Sym* typenamesym(Type *t); Sym* tracksym(Type *t); Sym* typesymprefix(char *prefix, Type *t); int haspointers(Type *t); diff --git a/src/cmd/gc/reflect.c b/src/cmd/gc/reflect.c index 89ded4bd40..849a1edb27 100644 --- a/src/cmd/gc/reflect.c +++ b/src/cmd/gc/reflect.c @@ -652,8 +652,8 @@ typesymprefix(char *prefix, Type *t) return s; } -Node* -typename(Type *t) +Sym* +typenamesym(Type *t) { Sym *s; Node *n; @@ -674,7 +674,16 @@ typename(Type *t) signatlist = list(signatlist, typenod(t)); } + return s->def->sym; +} +Node* +typename(Type *t) +{ + Sym *s; + Node *n; + + s = typenamesym(t); n = nod(OADDR, s->def, N); n->type = ptrto(s->def->type); n->addable = 1; diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index 71417bb0a0..b302c49816 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -3517,7 +3517,7 @@ ngotype(Node *n) { if(n->sym != S && n->realtype != T) if(strncmp(n->sym->name, "autotmp_", 8) != 0) - return typename(n->realtype)->left->sym; + return typenamesym(n->realtype); return S; }