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"