Introduction

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.

Legal Prerequisites

You must follow the Go copyright rules.

Code

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 run-time 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.

Testing

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.

Submitting Changes

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.