summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-04-11 14:51:35 -0700
committerRuss Cox <rsc@golang.org>2010-04-11 14:51:35 -0700
commitcc06efd94099837c0744e8d8fce883ba9ec318d4 (patch)
tree4fb4262bc0c86bbe5a68b509ed1e87b72851229b /src
parent4ecc4c5f35e90ddbea7072cbc34bf3551127ebb7 (diff)
downloadgolang-cc06efd94099837c0744e8d8fce883ba9ec318d4.tar.gz
gc: make sure main.main has correct type
R=ken2 CC=golang-dev http://codereview.appspot.com/883049
Diffstat (limited to 'src')
-rw-r--r--src/cmd/gc/go.y11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index 06696d52f..98f671988 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -1070,11 +1070,18 @@ fndcl:
$3 = checkarglist($3, 1);
$$ = nod(ODCLFUNC, N, N);
$$->nname = $1;
- if($3 == nil && $5 == nil)
- $$->nname = renameinit($1);
n = nod(OTFUNC, N, N);
n->list = $3;
n->rlist = $5;
+ if(strcmp($1->sym->name, "init") == 0) {
+ $$->nname = renameinit($1);
+ if($3 != nil || $5 != nil)
+ yyerror("func init must have no arguments and no return values");
+ }
+ if(strcmp(localpkg->name, "main") == 0 && strcmp($1->sym->name, "main") == 0) {
+ if($3 != nil || $5 != nil)
+ yyerror("func main must have no arguments and no return values");
+ }
// TODO: check if nname already has an ntype
$$->nname->ntype = n;
funchdr($$);