These are some notes on contributing to the gccgo
frontend for GCC. For information on contributing to parts of Go other
than gccgo
, see Contributing to
the Go project. For information on building gccgo
for yourself, see Setting up and using
gccgo.
You must follow the Go copyright rules.
The source code for the gccgo
frontend may be found at
http://code.google.com/p/gofrontend.
Changes made to that project are routinely merged into the source code
hosted at gcc.gnu.org
. The gofrontend
project includes only the Go frontend proper. These are the files
which in the gcc
sources may be found in the
directories gcc/go
and libgo
.
The gcc
sources also include a copy of
the test
directory
from the main Go repository.
The frontend is written in C++ and as such the GNU coding standards do
not entirely apply; in writing code for the frontend, follow the
formatting of the surrounding code. Although the frontend is
currently closely tied to the rest of the gcc
codebase,
we plan to make it more independent. Any new code that uses other
parts of gcc
should be placed in an appropriate file,
such as gogo-tree.cc
. Eventually
all gcc
-specific code should migrate to
a gcc-interface
subdirectory.
The runtime library for gccgo
is mostly the same as the
library in the main Go
repository. The library code in the Go repository is periodically
copied into the gofrontend
and the gcc
repositories. Accordingly, most library changes should be made in the
main Go repository. Changes to the few gccgo
-specific
parts of the library should follow the process described here.
The gccgo
-specific parts of the library are everything in
the libgo
directory except for the libgo/go
subdirectory.
All patches must be tested. There are two test suites. A patch that introduces new failures is not acceptable.
To run the compiler test suite, run make check-go
in the
gcc
subdirectory of your build directory. This will run
various tests underneath gcc/testsuite/go.*
. This
includes a copy of the tests in the main Go repository, which are run
using the DejaGNU script found in
in gcc/testsuite/go.test/go-test.exp
. Many of the
compiler tests may be run without the Go library, but some do require
the library to built first.
To run the library test suite, run make
check-target-libgo
in the top level of your build directory.
Most new tests should be submitted to the main Go repository for
copying into the gccgo
repository. If there is a need
for specific tests for gccgo
, they should go in
the gcc/testsuite/go.go-torture
or gcc/testsuite/go.dg
directories in
the gcc.gnu.org
repository.
Changes to the Go frontend should follow the same process as for the
main Go repository, only for the gofrontend
project
rather than the go
project. Those changes will then be
merged into the gcc
sources.