summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/gc/go.y11
-rw-r--r--test/fixedbugs/bug039.go2
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"
}