GCC: Anonymous read-only SVN access

Our SVN source repository is available read-only to the public at large.

That way you can pick up any version (including releases) of GCC that is in our repository or our web pages.

Web pages are still stored in CVS, and thus, should be accessed using the directions for CVS

In addition, you can browse our SVN history online at

Using the SVN repository

Assuming you have version 1.0.0 and higher of Subversion installed, you can check out the GCC sources using the following command:

svn -q checkout svn://gcc.gnu.org/svn/gcc/trunk gcc

(The option -q above is optional and instructs SVN to print as little as possible. You can abbreviate checkout as co.)

If you are behind a firewall that does not allow the svn protocol through, you can replace svn:// with http://. You may also need to modify your subversion servers file (~/.subversion/servers) to set http-proxy-host and http-proxy-port. You should only use the http protocol if the svn protocol does not work; the http protocol has a higher server overhead associated with it and will be slower.

Generated files

Our source tree contains a number of files that are generated from other source files by build tools such as Bison, Autoconf, and Gperf. Bison is now required when using SVN to access our sources, but all other generated files are included in the source tree so that GCC can be built without these build tools. The SVN checkout and update operations do not insure that the timestamps of generated files are later than those of the files they are generated from. The script contrib/gcc_update updates the timestamps for all these generated files. See the comments in that script for instructions on running it.

GCC's build system (in particular Make) uses file timestamps to determine if a generated file needs to be updated by running a particular build tool. Because of this, GCC's build system may believe that a generated file needs regenerating even though its source has not changed, and require a particular build tool to rebuild that generated file. If the appropriate build tool is installed on your system, then this will not be a problem. If you do not intend to make changes to the source, you can avoid installing these build tools by running contrib/gcc_update.

There has been some discussion of removing these generated files from GCC's SVN source tree (there is no discussion of removing them from the released source tarballs). If that happens then building GCC from the SVN source tree would require installing the above mentioned build tools. Installing these build tools is not particularly difficult, but can be time consuming especially if you only occasionally install GCC on a particular system.

The build tools that GCC uses are all available from the GNU Project (see http://www.gnu.org), are often already available on many systems, and can often be found already built for some systems. A partial list of these build tools is: Autoconf, Bison, Xgettext, Automake, and Gperf.

Conflicts when using svn update

It is not uncommon to get svn conflict messages for some generated files when updating your local sources from the SVN repository. Typically such conflicts occur with autoconf generated files.

As long as you haven't been making modifications to the generated files or the generator files, it is safe to delete the offending file, then run svn update again to get a new copy.

SVN tags, branches and checkouts

You can check out the latest version of the GCC x.y release branch with the following command:

svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-x_y-branch gcc

By changing the gcc-x_y-branch part of the URL, you can check out particular releases or branches.

Release and branches

For recent releases, the SVN tag for GCC X.Y.Z is of the form "gcc_X_Y_Z_release":

svn co svn://gcc.gnu.org/svn/gcc/tags/gcc_x_y_z_release gcc

The SVN branch for GCC releases in the X.Y series is generally of the form "gcc-X_Y-branch". The following list therefore provides only some representative examples.

Active Development Branches

General Infrastructure

tree-profiling-branch
This branch is for the development of profiling heuristics and profile based optimizations for trees, such as profile driven inline heuristics. Another goal of this branch is to demonstrate that maintaining the CFG and profile information over expanding from GIMPLE trees to RTL is feasible and can bring considerable performance improvements.
struct-reorg-branch
This branch is for the development of structure reorganization optimizations, including field reordering, structure splitting for trees. These optimizations are profile information driven. This is a subbranch of tree-profiling. This branch is being maintained by Caroline Tice, Dale Johannesen, Kenneth Zadeck, Stuart Hastings, Mostafa Hagog.
autovect-branch
This branch is the successor to the lno-branch. The purpose of this branch is tree-level autovectorization work, and related work that the autovectorizer could use or benefit from (like data-dependence analysis, loop nest optimizations).
rtlopt-branch
This branch is the successor to the cfg-branch, with the exception that it is based on GCC pre-3.4. The purpose of the branch is to develop and test infrastructure for CFG based code improving transformations on RTL.
killloop-branch
The missing optimizations and optimization improvements necessary for removing the old loop optimizer are developed on this branch. Patches for this branch should be marked with the tag [killloop] in the subject line, and CC'ed to Zdenek Dvorak.
new-regalloc-branch
Daniel Berlin and Michael Matz are working on an implementation of a graph-coloring register allocator on this branch. It is known to bootstrap under x86-linux-gnu and ppc-linux-gnu.
structure-aliasing-branch
This branch contains improvements to the tree optimizers ability to do pointer-to-structure aliasing analysis and optimization. This involves some significant rework of the way our memory information is represented in the tree-ssa form. The branch is maintained by Daniel Berlin. Patches and discussion related to the branch should be marked with the tag [sa] in the subject line. The usual contribution and testing rules apply. Patches should be CC'd to Daniel Berlin for final approval.
ssaupdate-branch
This branch serves to clean up and improve utilities for the SSA form updating, as well as for related changes of the SSA form representation. This branch is supposed to be short-lived and should be merged to mainline as soon as possible. Patches and discussions related to the branch should be marked with the tag [ssaupdate] in the subject line. The patches for this branch do not require approval, but they should be sent to gcc-patches list and the usual testing rules apply.
cfo-branch
The goal of this branch is to add a new extension for improving the code size optimization of GCC with code factoring methods (code motion and merging algorithms). Messages should be marked with [cfo] in the subject line. The usual contribution and testing rules apply.
reload-branch
This branch contains a version of reload in which the tracking of reload register lifetimes and the inheritance code has been rewritten in an attempt to make it more maintainable.
improved-aliasing-branch
This branch contains improvements to the tree-based aliasing infrastructure. The branch is maintained by Daniel Berlin <dberlin@dberlin.org> and Diego Novillo < dnovillo@redhat.com> and will be routinely merged with mainline. Patches should be marked with the tag [improved-aliasing] in the subject line.
dataflow-branch
This branch contains replacement of backend dataflow with df.c based dataflow. The branch is maintained by Daniel Berlin < dberlin@dberlin.org> and Kenneth Zadeck < zadeck@naturalbridge.com> and will be routinely merged with mainline. Patches should be marked with the tag [dataflow-branch] in the subject line.
sched-treegion-branch
This branch is for the development of a treegion-based instruction scheduler. The branch is maintained by Chad Rosier.
mem-ssa
This branch contains the implementation of Memory SSA, a new mechanism for representing memory operations in SSA form (http://gcc.gnu.org/ml/gcc/2006-02/msg00620.html). The branch is maintained by Diego Novillo and will be routinely merged with mainline. Patches and discussion on this branch should be marked with the tag [mem-ssa] in the subject line.
gimple-tuples
This branch contains the implementation of GIMPLE tuples, a new representation for GIMPLE statements and expressions that replaces the current notion of treating everything as a tree ( http://gcc.gnu.org/wiki/tuples). This branch is maintained by Aldy Hernandez and will be routinely merged with mainline. Patches and discussion on this branch should be marked with the tag [tuples] in the subject line.
yara-branch
This branch contains Yet Another Register Allocator (YARA). The branch is maintained by Vladimir Makarov < vmakarov@redhat.com> and will be merged with mainline from time to time. Patches will be marked with the tag [yara-branch] in the subject line.
opt-diary
This branch contains the implementation of Optimization Diary, a collection of useful log information generated by the optimizers. This branch is maintained by Devang Patel. Patches and discussion on this branch should be marked with the tag [opt-diary] in the subject line.
lto
This branch aims to implement link-time optimization. Patches and discussion on this branch should be marked with the tag [lto] in the subject line.
predcom
This branch aims to implement predictive commoning optimization and to introduce the changes to the representation of Fortran arrays, alias analysis and dependency analysis to make it useful for the common applications (e.g., mgrid). The patches for this branch should be marked with the tag [predcom] in the subject line. The branch is maintained by Zdenek Dvorak.
boehms-gc
The goal of this branch is to test Boehm's GC feasibility as the garbage collector for GCC proper. This is a part of Google Summer of Code project, described in detail at http://gcc.gnu.org/wiki/Garbage%20collection%20tuning. The branch is maintained by Laurynas Biveinis.
ra-improvements
This branch aims to implement several improvements to the current register allocator. Examples include implenting a lower-triangular conflict matrix and register coalescing. It is hoped that these improvements will not only help the current allocator, but will be useful to the other register allocation projects such as RABLE and YARA. This branch will be merged with the dataflow-branch from time to time. The patches for this branch should be marked with the tag [ra-improvements] in the subject line. The branch is maintained by Peter Bergner.
insn-select
This branch aims to implement in early instruction selection and register class selection pass, which runs before register allocation and subsumes the current regclass pass. In particular the goal is to chose an alternative per instruction, usable as a base during register allocation, which ideally is not changed during reload if registers could be allocated. This will not be possible in all cases, especially when addresses generated during spilling will be invalid on the target machine. But we should be able to do away with fake register classes representing strict unions of other register classes. Patches should be marked with [isel] or [insn-select] in the subject line. The branch is maintained by Michael Matz.
addressing-modes
This branch aims to clean up the way base and index registers are handled by target headers. In particular, the strict and non-strict meaning of these registers are unified and a common API is presented to implementations of the target macros. Obsolete target macros will also be removed. Patches should be marked with [addrmodes] in the subject line, and only need approval (from Paolo Bonzini) if they may change the compiler output. The branch is maintained by Paolo Bonzini.

Architecture-specific

csl-arm-branch
CodeSourcery branch for developing ARM back end improvements. The branch is maintained by CodeSourcery personnel. Patches should be marked with the tag [csl-arm-branch] in the subject line.
csl/coldfire-4_1
CodeSourcery branch for developing ColdFire back end improvements. The branch is maintained by CodeSourcery personnel. Patches should be marked with the tag [csl-coldfire] in the subject line.
csl-sol210-3_4-branch
CodeSourcery branch for developing Solaris 2.10 AMD64 support for GCC 3.4. This branch is maintained by CodeSourcery personnel. Patches should be marked with the tag [csl-sol210-branch] in the subject line.
hammer-3_3-branch
The goal of this branch is to have a stable compiler based on GCC 3.3 with improved performance for AMD's 64-bit Hammer CPUs. The branch is maintained by Jan Hubicka <jh@suse.cz> and Andreas Jaeger <aj@suse.de>. Patches added on this branch might not be appropriate for the GCC 3.3 branch due to our policies concerning release branches. All patches will be added to mainline GCC (for 3.4). The branch is regularly merged with the GCC 3.3 branch.
gcc-3_4-e500-branch
This branch is for stabilization of the powerpc-*spe architecture, and for adding support for the 8548 chip (e500 v2). This branch is maintained by Aldy Hernandez. Patches should be marked with the tag [3.4-e500] in the subject line. ChangeLog entries should go in ChangeLog.e500.
ia64-fp-model-branch
This branch is a short-lived development branch with the goal of implementing the improvements and features discussed at the ia64 floating point page on the GCC wiki. It is maintained by Zack Weinberg <zack@codesourcery.com>. Patches should be marked with the tag [ia64-fp-model] in the subject line.
ia64-improvements
The goal of this branch is to improve the performance of binaries generated with GCC on the Itanium processor. Details of current projects on this branch can be found at the Gelato GCC wiki and at the IA-64 improvements page. This branch is maintained by Robert Kidd <rkidd@crhc.uiuc.edu> and Diego Novillo. Patches and discussion related to this branch should be marked with the tag [ia64-improvements] in the subject line. The usual contribution and testing rules apply.
st/cli
The goal of the branch is to develop a back-end producing CLI binaries, compliant with ECMA-335 specification. This branch is maintained by Roberto Costa <roberto.costa@st.com>.

Language-specific

cxx-reflection-branch
Part of the work on providing support for compile time reflection in C++ is done in this branch. This branch is maintained by Gabriel Dos Reis <gdr@integrable-solutions.net>.
objc-improvements-branch
This branch was originally used to merge Objective-C bug fixes and enhancements from Apple Computer into the FSF tree; this has now been completed. Presently, the purpose of the branch is to implement the Objective-C++ language in the FSF GCC source tree. The message thread starting here describes this at more length. This branch is being maintained by Zem Laski <zlaski@apple.com>.
libada-gnattools-branch
This is the spiritual successor to the libada branch. This branch exists to solve bug 5911 and others, by breaking out the Ada runtime into a libada directory and the Ada tools into a gnattools directory. Current work is devoted to cleaning up the configure and make machinery, and separating it as much as possible from the GCC build machinery. Nathanael Nerode <neroden@gcc.gnu.org> is maintaining this branch.
gcj-eclipse
This branch is used for replacing the gcj front end with the eclipse java compiler. Patches should be marked with the tag [ecj] and should be sent to the java-patches list. Tom Tromey <tromey@redhat.com> is maintaining this branch.
libstdcxx_so_7-branch
This is a branch for experimental work on the C++ Runtime Library (libstdc++-v3) beyond the current version 6 library ABI. Paolo Carlini <pcarlini@suse.de> and Benjamin Kosnik <bkoz@redhat.com> are maintaining this branch.

Distribution Branches

These branches are maintained by organizations distributing GCC. No changes should be made to those branches without the explicit permission of the distributing organization. The branch name should be prefixed with the initials of the distributing organization.

apple-local-200502-branch
This branch is for various improvements in use at Apple and to coordinate work with others. This branch is maintained by the folks at Apple. Previous branch was apple-ppc-branch.
csl-3_3_1-branch
CodeSourcery release based on GCC 3.3.1.
csl-arm-2004-q3-branch
CodeSourcery ARM 2004-Q3 release
csl-3_4-linux-branch
CodeSourcery GNU/Linux compilers based on GCC 3.4.x.
csl-3_4_3-linux-branch
CodeSourcery GNU/Linux compilers based on GCC 3.4.3, with patches from the csl-arm-branch.
csl-gxxpro-3_4-branch
CodeSourcery's Sourcery G++ compilers, based on GCC 3.4.x.
ibm/gcc-4_1-branch
This branch provides decimal float support backported to GCC 4.1.x. It is expected to be used primarily within IBM for PowerPC-64 GNU/Linux. The branch is maintained by Janis Johnson <janis@us.ibm.com>.
redhat/gcc-3_2-branch
Red Hat GNU/Linux compilers based on GCC 3.2.x.
redhat/gcc-3_4-branch
Red Hat GNU/Linux compilers based on GCC 3.4.x.
redhat/gcc-4_0-branch
Red Hat GNU/Linux compilers based on GCC 4.0.x.
redhat/gcc-4_1-branch
Red Hat GNU/Linux compilers based on GCC 4.1.x.
suse/gcc-4_1-branch
SUSE GNU/Linux compilers based on GCC 4.1.x.

Inactive Development Branches

dfp-branch
edge-vector-branch
cp-parser-branch
cp-parser-branch-2
pch-branch
gcc-3_4-basic-improvements-branch
mips-3_4-rewrite-branch
dfa-branch
gcj-abi-2-dev-branch
tree-ssa-20020619-branch
csl-sol210-branch (Solaris 2.10 AMD64 support)
gomp-20050608-branch
These branches have been merged into the mainline.
apple-ppc-branch
This branch was for various improvements in use at Apple and to coordinate work with others. This branch was maintained by the folks at Apple. It has been superseded by apple-local-200502-branch.
stree-branch
This branch was for improving compilation speed and reducing memory use by representing declarations as small flat data structures whenever possible, lazily expanding them into full trees when necessary. This branch was being maintained by Matt Austern, Robert Bowdidge, Geoff Keating, and Mike Stump. Patches were marked with the tag [stree] in the subject line.
compile-server-branch
This branch was aimed at improving compile speed by caching work done between compilations. The work saved is mainly related to header file processing. This branch was maintained by Mike Stump and Per Bothner. Patches were marked with the tag [cs] in the subject line.
libobjc-branch
The branch is aimed to clean up libobjc and make it run on Darwin. Patches should be marked with the tag [libobjc-branch] in the subject line. Patches can be approved by Andrew Pinski <pinskia@gcc.gnu.org> or Nicola Pero <n.pero@mi.flashnet.it>.
cfg-branch
This branch was created to develop and test infrastructure for easier writing of new RTL based optimizations. The branch was based on GCC pre-3.3 and has been partially merged into the mainline for GCC 3.4. It is now closed, and work continues on the rtlopt-branch.
tree-ssa-cfg-branch
This branch has been merged into the tree-ssa-20020619-branch.
ast-optimizer-branch
The purpose of this branch was to improve GCC's tree based optimizations. The patches of this branch have been moved to the tree-ssa-20020619-branch.
faster-compiler-branch
This was a temporary branch for compiler speedups for GCC 3.4. See this thread for discussion of possible work still to be done in this area. The branch is unmaintained at present.
gcc-3_3-e500-branch
This branch was for backporting the PowerPC/E500 back end to GCC 3.3. See this message for details.
gomp-01-branch
gomp-branch
These two branches were initial attempts to implement OpenMP support in GCC. They were never properly maintained and have now been superceded by gomp-20050608-branch.
lno-branch
A sub-branch of tree-ssa that aims at implementing a loop nest optimizer at the tree level. Was largely merged into mainline, and is currently unmaintained. This work now continues on the autovect-branch.
java-gui-branch
This was a temporary branch for development of java GUI libraries (AWT and Swing) in the libjava directory. It has been superseded by java-gui-20050128-branch
java-gui-20050128-branch
This was a temporary branch for development of java GUI libraries (AWT and Swing) in the libjava directory. It has been merged into mainline.
gcjx-branch
This branch was used for development of gcjx, a rewrite of the front end for the Java programming language. It has been superseded by gcj-eclipse-branch.
csl-hpux-branch
This branch was for changes to G++ to be more compatible with ABI bugs in the HP-UX C++ compiler. It is now unmaintained.
tree-cleanup-branch
This branch contained improvements and reorganization to the tree optimizers that were not ready in time for GCC 4.0. The goal was to cleanup the tree optimizers and improve the sequencing of the passes. It has now been merged into mainline for the 4.1 release.
bje-unsw-branch
This branch was dedicated to some research work by Ben Elliston at the University of New South Wales (UNSW) on transformation phase ordering. It will never merge with mainline, although a selection of patches may be submitted over time.
redhat/gcc-3_3-branch
This branch used to hold Red Hat GNU/Linux compilers based on GCC 3.3.x.