The GNU Compiler Collection (GCC) is a set of compilers intended for translating different high-level programming languages (like C, C++, Java, Ada, Fortran) to executable object code runnable on different target platforms (like x86, x86_64, SPARC, ARM, PowerPC, PA-RISC or Itanium). This flexibility is achieved by a very modular architecture composed of front-end (language dependent), middle-end (language and target platform independent) and back-end (target platform dependent). For example, if you have an ingenious idea for a new programming language, but you do not want to care about the optimization and code generation on as many target platforms as possible: extend GCC by a new front-end and reuse the already implemented middle-end and back-ends. And the same vice-versa for a new target platform which you want to write C or C++ code for (for example an embedded system).
The purpose of this page and its sub-pages is to exemplify some of the GCC internals, while currently covering: