From: Rémy Oudompheng Date: Sun, 9 Dec 2012 18:27:23 +0000 (+0100) Subject: cmd/gc: prevent ngotype from allocating. X-Git-Tag: go1.1rc2~1689 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=10d14b63c2c2693cd2132859c34342c5f4b398f6;p=gostls13.git cmd/gc: prevent ngotype from allocating. R=golang-dev, dave, rsc CC=golang-dev https://golang.org/cl/6904061 --- 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; }