From: Ken Thompson Date: Mon, 15 Sep 2008 00:29:50 +0000 (-0700) Subject: robs wednesday bug X-Git-Tag: weekly.2009-11-06~3208 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d01a1ec2604da11e5c16125b96cc190aec416d81;p=gostls13.git robs wednesday bug R=r OCL=15327 CL=15327 --- diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index e36eece280..1d776d4813 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -666,6 +666,8 @@ void doimport9(Sym*, Node*); /* * walk.c */ +void addtotop(Node*); +void gettype(Node*, Node*); void walk(Node*); void walkstate(Node*); void walktype(Node*, int); diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index 15c56370d0..9d05bf43dd 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -247,20 +247,22 @@ Bvardcl: dodclvar($$, $2); $$ = nod(OAS, $$, $4); + addtotop($$); } | new_name '=' expr { - gettype($3); + $$ = nod(OAS, $1, N); + gettype($3, $$); defaultlit($3); dodclvar($1, $3->type); - $$ = nod(OAS, $1, $3); + $$->right = $3; } constdcl: new_name type '=' expr { Node *c = treecopy($4); - gettype(c); + gettype(c, N); convlit(c, $2); dodclconst($1, c); @@ -270,7 +272,7 @@ constdcl: | new_name '=' expr { Node *c = treecopy($3); - gettype(c); + gettype(c, N); dodclconst($1, c); lastconst = $3; @@ -282,7 +284,7 @@ constdcl1: | new_name type { Node *c = treecopy(lastconst); - gettype(c); + gettype(c, N); convlit(c, $2); dodclconst($1, c); @@ -291,7 +293,7 @@ constdcl1: | new_name { Node *c = treecopy(lastconst); - gettype(c); + gettype(c, N); dodclconst($1, c); iota += 1; diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 2975149b73..503f9260e5 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -76,12 +76,14 @@ addtotop(Node *n) } void -gettype(Node *n) +gettype(Node *n, Node *a) { if(debug['W']) dump("\nbefore gettype", n); walktype(n, Erv); - addtotop(n); + if(a == N && addtop != N) + fatal("gettype: addtop"); + addtotop(a); if(debug['W']) dump("after gettype", n); }