From: Russ Cox Date: Sat, 22 Dec 2012 22:23:33 +0000 (-0500) Subject: cmd/gc: add diagnostic for var, type, const named init X-Git-Tag: go1.1rc2~1540 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3aed92f81136da6dc5848593fcf6f8b8d5c65c5e;p=gostls13.git cmd/gc: add diagnostic for var, type, const named init Before this CL, defining the variable worked fine, but then when the implicit package-level init func was created, that caused a name collision and a confusing error about the redeclaration. Also add a test for issue 3705 (func init() needs body). Fixes #4517. R=ken2 CC=golang-dev https://golang.org/cl/7008045 --- diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index bf226d92a3..7bc9ce988e 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -188,6 +188,9 @@ declare(Node *n, int ctxt) if(importpkg == nil && !typecheckok && s->pkg != localpkg) yyerror("cannot declare name %S", s); + if(ctxt == PEXTERN && strcmp(s->name, "init") == 0) + yyerror("cannot declare init - must be func", s); + gen = 0; if(ctxt == PEXTERN) { externdcl = list(externdcl, n); diff --git a/test/fixedbugs/issue3705.go b/test/fixedbugs/issue3705.go new file mode 100644 index 0000000000..c19bcea1cc --- /dev/null +++ b/test/fixedbugs/issue3705.go @@ -0,0 +1,9 @@ +// errorcheck + +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +func init() // ERROR "missing function body" diff --git a/test/fixedbugs/issue4517a.go b/test/fixedbugs/issue4517a.go new file mode 100644 index 0000000000..a1b6b57e97 --- /dev/null +++ b/test/fixedbugs/issue4517a.go @@ -0,0 +1,9 @@ +// errorcheck + +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +var init = 1 // ERROR "cannot declare init - must be func" diff --git a/test/fixedbugs/issue4517b.go b/test/fixedbugs/issue4517b.go new file mode 100644 index 0000000000..f04103ff5b --- /dev/null +++ b/test/fixedbugs/issue4517b.go @@ -0,0 +1,9 @@ +// errorcheck + +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +const init = 1 // ERROR "cannot declare init - must be func" diff --git a/test/fixedbugs/issue4517c.go b/test/fixedbugs/issue4517c.go new file mode 100644 index 0000000000..47b21cf408 --- /dev/null +++ b/test/fixedbugs/issue4517c.go @@ -0,0 +1,9 @@ +// errorcheck + +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +type init byte // ERROR "cannot declare init - must be func"