mirror of
https://github.com/golang/go.git
synced 2024-09-22 02:48:50 +00:00
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);
|
||||
|
9
test/fixedbugs/issue3705.go
Normal file
9
test/fixedbugs/issue3705.go
Normal file
@ -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"
|
9
test/fixedbugs/issue4517a.go
Normal file
9
test/fixedbugs/issue4517a.go
Normal file
@ -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"
|
9
test/fixedbugs/issue4517b.go
Normal file
9
test/fixedbugs/issue4517b.go
Normal file
@ -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"
|
9
test/fixedbugs/issue4517c.go
Normal file
9
test/fixedbugs/issue4517c.go
Normal file
@ -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
Block a user