compiler: error on func declaration/definition
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 12 Feb 2018 19:29:52 +0000 (19:29 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 12 Feb 2018 19:29:52 +0000 (19:29 +0000)
commit52eb4ab4092228369cea5d7ca2717d32cc666c5c
tree48902ea09d6ebb6b6a26f1aa463e3e48e00381a0
parent86ff185365dbc40b64f907be9e2f35d756776e20
compiler: error on func declaration/definition

    Long long long ago Go permitted writing
        func F()
    in one file and writing
        func F() {}
    in another file.  This was removed from the language, and that is now
    considered to be a multiple definition error.  Gccgo never caught up
    to that, and it has been permitting this invalid code for some time.

    Stop permitting it, so that we give correct errors.  Since we've
    supported it for a long time, the compiler uses it in a couple of
    cases: it predeclares the hash/equal methods if it decides to create
    them while compiling another function, and it predeclares main.main as
    a mechanism for getting the right warning if a program uses the wrong
    signature for main.  For simplicity, keep those existing uses.

    This required a few minor changes in libgo which were relying,
    unnecessarily, on the current behavior.

    Reviewed-on: https://go-review.googlesource.com/93083

From-SVN: r257600
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/gogo.cc
libgo/go/runtime/extern.go
libgo/go/runtime/stubs.go
libgo/misc/cgo/test/issue9400/gccgo.go
libgo/misc/cgo/test/issue9400/stubs.go