summaryrefslogtreecommitdiff
path: root/src/cmd/gc/walk.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gc/walk.c')
-rw-r--r--src/cmd/gc/walk.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 1b5ca4746..24a3a39c2 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -1020,6 +1020,12 @@ loop:
indir(n, nvar);
goto ret;
}
+ if(istype(n->left->type, TFUNC) && n->left->class == PFUNC) {
+ if(!n->diag) {
+ n->diag = 1;
+ yyerror("cannot take address of function");
+ }
+ }
walktype(n->left, Elv);
addrescapes(n->left);
if(n->left == N)
@@ -1060,10 +1066,8 @@ loop:
goto ret;
}
t = n->type;
- if(t == T || t->etype == TFUNC) {
- yyerror("cannot new(%T)", t);
+ if(t == T)
goto ret;
- }
indir(n, callnew(t));
goto ret;
}
@@ -1721,6 +1725,8 @@ loop:
badtype(op, l->type, r->type);
return N;
}
+ if(l->op == ONAME && l->class == PFUNC)
+ yyerror("cannot assign to function");
a = nod(OAS, l, r);
a = convas(a);