Updates #43308.
Change-Id: I2caff83f304c7e104edda76ac3623cce9fc94a8d
Reviewed-on: https://go-review.googlesource.com/c/go/+/279552
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
obj := NewFunc(d.Name.Pos(), pkg, name, nil)
if d.Recv == nil {
// regular function
- if name == "init" {
+ if name == "init" || name == "main" && pkg.name == "main" {
if d.TParamList != nil {
- //check.softErrorf(d.TParamList.Pos(), "func init must have no type parameters")
- check.softErrorf(d.Name, "func init must have no type parameters")
+ check.softErrorf(d, "func %s must have no type parameters", name)
}
if t := d.Type; len(t.ParamList) != 0 || len(t.ResultList) != 0 {
- check.softErrorf(d, "func init must have no arguments and no return values")
+ check.softErrorf(d, "func %s must have no arguments and no return values", name)
}
- // don't declare init functions in the package scope - they are invisible
+ }
+ // don't declare init functions in the package scope - they are invisible
+ if name == "init" {
obj.parent = pkg.scope
check.recordDef(d.Name, obj)
// init functions must have a body
--- /dev/null
+// Copyright 2020 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 main
+
+func /* ERROR "func main must have no type parameters" */ main[T any]() {}
--- /dev/null
+// Copyright 2020 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 main
+
+func main()
+func /* ERROR "no arguments and no return values" */ main /* ERROR redeclared */ (int)
+func /* ERROR "no arguments and no return values" */ main /* ERROR redeclared */ () int
"import6.go": true, // issue #43109
"initializerr.go": true, // types2 reports extra errors
"linkname2.go": true, // error reported by noder (not running for types2 errorcheck test)
- "mainsig.go": true, // issue #43308
"shift1.go": true, // issue #42989
"switch4.go": true, // error reported by noder (not running for types2 errorcheck test)
"typecheck.go": true, // invalid function is not causing errors when called