robs wednesday bug
R=r
OCL=15327
CL=15327
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index e36eece..1d776d4 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -666,6 +666,8 @@
/*
* 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 15c5637..9d05bf4 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -247,20 +247,22 @@
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 @@
| new_name '=' expr
{
Node *c = treecopy($3);
- gettype(c);
+ gettype(c, N);
dodclconst($1, c);
lastconst = $3;
@@ -282,7 +284,7 @@
| new_name type
{
Node *c = treecopy(lastconst);
- gettype(c);
+ gettype(c, N);
convlit(c, $2);
dodclconst($1, c);
@@ -291,7 +293,7 @@
| 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 2975149..503f926 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -76,12 +76,14 @@
}
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);
}