]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile/internal/types2: report error for invalid main function...
authorRobert Griesemer <gri@golang.org>
Tue, 22 Dec 2020 00:48:58 +0000 (16:48 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 22 Dec 2020 17:51:21 +0000 (17:51 +0000)
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>

src/cmd/compile/internal/types2/resolver.go
src/cmd/compile/internal/types2/testdata/main.go2 [new file with mode: 0644]
src/cmd/compile/internal/types2/testdata/main.src [new file with mode: 0644]
test/run.go

index 2c98ca20e30bd7eb37a3ebcd05c31023f90c64c0..7ea9bde5fadb22d40dd09c456d692d64969044f0 100644 (file)
@@ -397,15 +397,16 @@ func (check *Checker) collectObjects() {
                                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
diff --git a/src/cmd/compile/internal/types2/testdata/main.go2 b/src/cmd/compile/internal/types2/testdata/main.go2
new file mode 100644 (file)
index 0000000..b7ddeaa
--- /dev/null
@@ -0,0 +1,7 @@
+// 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]() {}
diff --git a/src/cmd/compile/internal/types2/testdata/main.src b/src/cmd/compile/internal/types2/testdata/main.src
new file mode 100644 (file)
index 0000000..f892938
--- /dev/null
@@ -0,0 +1,9 @@
+// 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
index 5ec33f16f202f401a50029dd63b4b5a3c7c28fca..fcf8a4fcc96f697682f1df5b388166db4bc154c7 100644 (file)
@@ -1936,7 +1936,6 @@ var excluded = map[string]bool{
        "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