diff options
-rw-r--r-- | src/cmd/gc/go.y | 11 | ||||
-rw-r--r-- | test/fixedbugs/bug039.go | 2 |
2 files changed, 10 insertions, 3 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($$); diff --git a/test/fixedbugs/bug039.go b/test/fixedbugs/bug039.go index 30fbdbd3f..7ac02ceeb 100644 --- a/test/fixedbugs/bug039.go +++ b/test/fixedbugs/bug039.go @@ -6,6 +6,6 @@ package main -func main (x int) { // GCCGO_ERROR "previous" +func f (x int) { // GCCGO_ERROR "previous" var x int; // ERROR "redecl|redefinition" } |