Table of Contents

GCC Projects

Remember to keep other developers informed of any substantial projects you intend to work on.

Fix bugs in our bug tracking system

You can investigate bugs in our bug tracking system and attempt to fix them or see whether they still are present in current GCC.

Projects for beginner GCC hackers

If you are new to GCC, start with our projects for beginners.

Projects for the C preprocessor

There is a separate project list for the C preprocessor.

Projects for the GCC web pages

There is a separate projects list for the web pages.

Projects for improving the GCC documentation

There is a separate projects list for projects for improving the GCC documentation.

Development Branches

There are several development branches pursuing various goals.

Optimizer inadequacies

We also have a page detailing optimizer inadequacies, if you'd prefer to think about it in terms of problems instead of features.

Changes to support C99 standard

The new version of the C standard (ISO/IEC 9899:1999) requires a number of library changes; these have to be provided by the C library, and not by gcc. In addition, there are also changes to the language proper, and some compiler support is needed for the new library features. An overview of the C99 implementation status is available.

Miscellaneous ideas:

The following are some miscellaneous ideas for GCC projects to work on.

Improve -Wconversion

Improve -Wconversion so that it can be used for security auditing as well as for its original intended purpose of helping with converting old code to ISO C.

Implement various builtin functions for ISO C99's <tgmath.h>

Design and implement builtin functions that assist in implementing the ISO C99 <tgmath.h> macros. These builtins could be along the general lines of the macros used in glibc 2.2 (for example, the implementation of <tgmath.h> might use __builtin_tgmath_unary_real_only (value, log2f, log2, log2l) to implement the log2 macro), but should be designed so that, if the Annex G imaginary types are implemented in GCC, glibc does not need to change again to allow for them. This means additional functions, beyond those corresponding to the macros in glibc, are needed to handle the trigonometric functions which G.7 specifies have real or imaginary result type for imaginary arguments, but which have complex result type for complex arguments. The design for these builtins should be discussed with the gcc and libc-alpha lists.

Format (printf, scanf and strftime) checking:

Improve the installation procedure


Simpler porting

Right now, describing the target machine's instructions is done cleanly, but describing its addressing mode is done with several ad-hoc macro definitions. Porting would be much easier if there were an RTL description for addressing modes like that for instructions. Tools analogous to genflags and genrecog would generate macros from this description.

There would be one pattern in the address-description file for each kind of addressing, and this pattern would have:

Other languages

We currently have front ends for Ada, C, C++, Objective C, Fortran, and Java. A Pascal front end exists but has not yet been integrated.

Cobol and Modula-2 front ends might be useful, and are being worked on.

Generalize the machine model

Some new compiler features may be needed to do a good job on machines where static data needs to be addressed using base registers.

Some machines have two stacks in different areas of memory, one used for scalars and another for large objects. The compiler does not now have a way to understand this.

The scheduler does not do very well on recent RISC machines. Haifa helps but not enough.

More warnings

Warn about statements that are undefined because the order of evaluation of increment operators makes a big difference. Here is an example:

*foo++ = hack (*foo);

-Wsequence-point does some of this, but not that particular case.


The old PROBLEMS file

The following used to be in a file PROBLEMS in the GCC distribution. Probably much of it is no longer relevant as of GCC 3.0 (the file hadn't changed since GCC 2.0), but some might be. Someone should go through it, identifying what is and isn't relevant, adding anything applicable to current GCC (and describing a bug) to our bug-tracking system and sending patches to gcc-patches to remove such analysed entries from the list.

  1. Possible special combination pattern: If the two operands to a comparison die there and both come from insns that are identical except for replacing one operand with the other, throw away those insns. Ok if insns being discarded are known 1 to 1. An andl #1 after a seq is 1 to 1, but how should compiler know that?
  2. Any number of slow zero-extensions in one loop, that have their clr insns moved out of the loop, can share one register if their original life spans are disjoint. But it may be hard to be sure of this since the life span data that regscan produces may be hard to interpret validly or may be incorrect after cse.
  3. In cse, when a bfext insn refers to a register, if the field corresponds to a halfword or a byte and the register is equivalent to a memory location, it would be possible to detect this and replace it with a simple memory reference.

Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are also other ways to contact the FSF.

These pages are maintained by the GCC team.

For questions related to the use of GCC, please consult these web pages and the GCC manuals. If that fails, the gcc-help@gcc.gnu.org mailing list might help.
Please send comments on these web pages and the development of GCC to our developer mailing list at gcc@gnu.org or gcc@gcc.gnu.org. All of our lists have public archives.

Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.

Last modified 2005-01-31 Valid XHTML 1.0