mirror of https://github.com/golang/go.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
This commit is contained in:
parent
3fc3597c9b
commit
3aed92f811
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
Loading…
Reference in New Issue