SummerOfCode - GCC Wiki (original) (raw)

Google Summer Of Code

Thank you for your interest in the GNU Compiler Collection as your mentoring organization in Google's Summer of Code (GSoC). GCC has been accepted as a GSoC mentoring organization in 2026. The primary GSoC Org Admin for GCC is Martin Jambor, with Co-Org Admins David Edelsohn, and Thomas Schwinge. Please report to them any suspicious communications that you may receive.

For general discussions, reach out to the whole community by emailing mailing list gcc@gcc.gnu.org if you have any questions or requests - please put "GSoC" somewhere to the subject. If you are interested in gcc-rust topics, you can also reach out to the gcc-rust community via Zulip.

If you would like to be a GSoC contributor with GCC, first make sure you read the Before you apply and Application sections on this page and then pick a project, possibly from the list below. After you made your selection or have a project idea of your own, please discuss it as soon as possible (way before the application) via the gcc@gcc.gnu.org mailing list (put "GSoC" somewhere to the subject too) and feel free to raise it on IRC. Again, gcc-rust projects should be discussed via their Zulip.

Contents

  1. Google Summer Of Code
    1. Selected Project Ideas
    2. Before you apply
    3. Legal requirements
    4. Use of AI
    5. Application
      1. Formal application document
      2. Further tips and guidelines
    6. Other Project Ideas
      1. Link-time and interprocedural optimization improvements
      2. Language front-ends and run-time libraries
      3. New optimization passes
      4. Other projects and project ideas
      5. Improving GCC Developer Documentation
    7. Accepted GCC Projects
      1. 2025
      2. 2024
      3. 2023
      4. 2022
      5. 2021
      6. 2020
      7. 2019
      8. 2018
      9. 2016
      10. 2015
      11. 2014
      12. 2013
      13. 2012
      14. 2011
      15. 2010
      16. 2009
      17. 2008
      18. 2007
      19. 2006

Selected Project Ideas

When discussing GSoC project ideas in the community, we have found out we are especially interested in the following few. One of their main advantages, apart from their particular relevance and usefulness this year, is that we are confident we can find mentors for them. We will however also consider other projects and we will be happy to discuss your own ideas with you. Nevertheless, please do consider applying for the following:

Notes on OpenACC init, shutdown, set directives:
Certain functionality in OpenACC exists both in a directive variant and a runtime API routine variant. For example, OpenACC 2.6 has 2.16.3. "Wait Directive" (directive variant) and 3.2.11. "acc_wait" etc. (runtime API routine variants). In GCC, the front ends map the directive variant to gcc/omp-builtins.def:BUILT_IN_GOACC_WAIT (see git grep --cached BUILT_IN_GOACC_WAIT\\\|c_finish_oacc_wait -- gcc/). This eventually gets translated to a regular function call to libgomp/oacc-async.c:GOACC_wait, which uses the same building blocks as do acc_wait etc., which are also implemented in libgomp/oacc-async.c. (libgomp is the GCC runtime library for OpenMP originally, but then also OpenACC, implementing both the user-level OpenACC "Runtime Library Routines" and the compiler-used GOACC_[...] etc. routines.) Similar for #pragma acc enter data create(var) vs. acc_create, and others. Some users like to use one of directive vs. runtime API routine variants over the other; generally some prefer using the directive variants instead of C/C++ #include <openacc.h> or Fortran use openacc module. Corresponding to the acc_init, acc_shutdown, acc_set_device_num/acc_set_device_type runtime API routine variants implemented in GCC, in OpenACC 2.5, "New init, shutdown, set directives were added", which are not yet implemented in GCC. Implementation of those is assumed to be very much similar as the OpenACC wait directive is via BUILT_IN_GOACC_WAIT, for example, so would enhance the GCC code along these lines, plus proper testsuite coverage.

The expected outcome of all projects listed above is a series of patch submissions which pass review and are included in the main GCC repository, the GCC-Rust project repository (for Rust-related projects) and/or binutils (e.g. the demangler code is shared between GCC and binutils).

Unless a project above was explicitly marked with a different difficulty, consider it to be hard. Generally speaking, GCC is a production compiler and working on one of those is always hard, especially if you are new. On the other hand, the community of GCC developers is very helpful and goes out of its way to assist newcomers with various difficulties they inevitably encounter.

If the list above was not exhaustive enough for you, you can have a look also at Other Project Ideas section below.


Before you apply

Applicants for a GCC Google Summer of Code project need to have experience coding in C/C++. Furthermore, if you want to work on the actual compiler you must have at least rudimentary theoretical background in the area of compilers and compiler optimizations - at the very least you need to understand the term intermediate representation (IR), sometimes also called intermediate language (IL). It also helps if you know what static single assignment (SSA) form is and why it is useful. This may not be strictly necessary if your project aims to improve a different tool or library that is part of GCC, such as the demangler but even in these cases you need to know about the required algorithms.

Before you apply and even before you even reach out to us make sure that you can check out the GCC source code from its Git repository, build GCC from it and run the testsuite (this is something that would need doing very many times in the course of any project working on GCC) and look around the project a bit.

The following links should help you:

If you have done all of the above, or at least most of it, and still find it all a little bit intimidating, do not despair. If you are facing any specific technical problem or if you have difficulties figuring out where to start looking for particular things, that is something the mentors and the community at large are willing to help you with. First, the mailing list you keep reading about here has an archive, it is always a good idea to check if some other GSoC applicant has not asked your question recently. If not, send an email describing your situation to the mailing list yourself. We will appreciate if in your email you will make it clear that you have read this section and briefly list the steps above you have managed to carry out successfully.

Any non-trivial contributions to GCC are accepted only if their author either formally assign their copyright for them to the Free Software Foundation or if the author certifies the "Developer Certificate of Origin" (DCO) by adding the Signed-off-by: tag to their submission. Both processes are described in the official page on Contributing to GCC. Accepted GSoC contributors will be expected to choose one and follow it.

Use of AI

With the exception of test cases, you may not include any non-trivial (more than de-minimus) amount of code generated by a Large Language Model (an "AI" such as ChatGPT, Gemini, and Copilot) in code that you submit as a participant of GCC GSoC.

Applications which look like that they have been generated by a Large Language Model will be quickly disregarded too, they will never give us the confidence that the applicant can finish the project. GCC contributors are used to working with non-native English speakers, in fact English is a foreign language for many of us, so do not be afraid of that.

Application

First, you need to select a project. If you have been following GCC development, you might have an idea of your own, otherwise look at the suggested projects above and try to pick one there. In the course of selecting a project or when researching it in order to write your application, do not hesitate to ask questions or request more details from the community by email to the gcc@gcc.gnu.org mailing list with the string "GSoC" in the email subject or on our #gcc IRC channel at irc.oftc.net. Please note that the mailing list does not accept HTML messages, you must set your email client to plain text. If you are interested in gcc-rust topics, you can also reach out to the community via Zulip.

When you have a draft of your proposal ready, send it to the gcc@gcc.gnu.org mailing list as a request for comments. First, it should help you come up with a much better final proposal. Second, when evaluating applicants, we look closely at how they responded to feedback and how they incorporated it in their application document. We are unlikely to accept an application from someone who has not interacted with the community before at all. Please remember to put the string "GSoC" in the email subject of all messages about GSoC or a GSoC project proposal.

Formal application document

GCC does not have any application form or a mandatory application format to follow, but we strongly suggest you include the following in the formal application document that you submit to GSoC:

Further tips and guidelines


Other Project Ideas

Note that some of the ideas found below might be fully or partially obsolete. This is another reason why it is always a good idea to discuss the project of interest on the mailing list and/or via IRC before submitting a GSoC proposal.

Link-time optimization (LTO) is powerful infrastructure in GCC and there are many areas how to make it better, for example:

Language front-ends and run-time libraries

New optimization passes

Other projects and project ideas

There are several pages with general ideas for GCC, many of which we linked below for easy access. These ideas usually are not just one project but a group of distinct projects.

Or invent your own project. We're always open to good ideas. But note that we are probably not too interested in projects to add new extensions to the C or C++ languages. We've found over time that these tend to introduce more problems than they solve.

Thanks, and we look forward to your submissions!

Improving GCC Developer Documentation

The rules of the GSoC program do not allow projects to consist of documentation improvements only. Nevertheless, note that writing documentation may be an important part of your project or even an essential one if you introduce user-visible changes and plan your work accordingly.


Accepted GCC Projects

2025

Project Student Mentors
Fortran - 2018/202x Yuao Ma Tobias Burnus
Implementing Parallel Features on the GCC Ada Frontend Ethan Luis McDonough Tucker Taft, Richard Wai
Rewrite Rust lints to operate on frontend's HIR Ryutaro Okada Arthur Cohen, Pierre-Emmanuel Patry
gccrs: Improving match expressions & pattern matching Zhi Heng Arthur Cohen, Pierre-Emmanuel Patry
Implementation of a simple in-memory file system for running offloading tests on NVIDIA GPUs Arijit Kumar Das Thomas Schwinge, Tobias Burnus
Tooling for running BPF GCC tests on a live kernel Piyush Raj Jose E. Marchesi, David Faust, Thomas Schwinge

2024

Project Student Mentors
gccrs - Inline Assembly Support jjasmine Arthur Cohen, Pierre-Emmanuel Patry
Fortran – DO CONCURRENT Anuj Mohite Tobias Burnus, Thomas Schwinge
Offloading to a separate process on the same host Georgii Burunsuzian Thomas Schwinge, Tobias Burnus
Borrow-checking IR location support Kushal Pal Arthur Cohen, Pierre-Emmanuel Patry
Rustc Testsuite Adapter for GCCRS Muhammad Mahad Thomas Schwinge, Arthur Cohen, Pierre-Emmanuel Patry
Improve nothrow detection in GCC Pranil Dey Martin Jambor, Jan Hubicka
Structured Dumping of GENERIC Trees Thor Preimesberger Richard Biener

2023

2022

2021

2020

2019

2018

2016

2015

2014

Project Student Mentor
Coarray support in GNU GFortran Alessandro Fanfarillo Tobias Burnus
Concepts Separate Checking Braden Obrzut Andrew Sutton
Integration of ISL code generator into Graphite Roman Gareev Tobias Grosser
Generating folding patterns from meta description Prathamesh Kulkarni Richard Biener
GCC Go escape analysis Ray Li Ian Lance Taylor

2013

2012

2011

2010

The source code for finished projects can be found at Google's code hosting site and their respective SVN branches.

2009

The source code for finished projects can be found at Google's code hosting site.

Project Student Mentor
Automatic parallelization in Graphite Li Feng Tobias Grosser
Enable generic function cloning and program instrumentation in GCC to be able to create static binaries adaptable to varying program and system behavior or different architectures at run-time Liang Peng Grigori Fursin
gfortran: Procedure Pointer Components & OOP Janus Weil Tobias Burnus
Traditional Loop Transformations pranav garg Sebastian Pop
Make the OpenCL Platform Layer API and Runtime API for the Cell Processor and CPUs phil prattszeliga Paolo Bonzini
Provide fine-grain optimization selection and tuning abilities in GCC to be able to tune default optimization heuristic of the compiler or fine optimizations for a given program on a given architecture entirely automatically using statistical and machine learning techniques from the MILEPOST project. Yuanjie Huang Grigori Fursin

2008

The source code for finished projects can be found at Google's code hosting site.

2007

The source code for finished projects can be found at Google's code hosting site.

Project Student Mentor
Propagating array data dependence information from Tree-SSA to RTL Alexander Monakov Daniel Berlin
Better_Uninitialized_Warnings Manuel López-Ibáñez Diego Novillo
Speeding up GCC for fun and profit James Webber Eric Marshall Christopher
Fortran 2003 features for GCC Janus Weil Steven Bosscher
Open Mutliprogramming Interprocedural Analasis and Optimalizations Jakub Staszak Daniel Berlin
Integrating OpenJDK's javac bytecode compiler into gcj Dalibor Topic Mark J. Wielaard
New static scheduling heuristic for GCC Dmitry Zhurikhin Vladimir Makarov
GCC support for Windows-compatible Structured Exception Handling (SEH) on the i386 platform Michele Cicciotti Ian Lance Taylor

2006

Project Student Mentor
Code parallelization using polyhedral model Plesco Alexandru Daniel Berlin
Escape_analysis Paul Biggar Daniel Berlin
Garbage_collection_tuning Laurynas Biveinis Daniel Berlin
java.lang.management in Classpath Andrew John Hughes Mark Wielaard
Lock free C++ containers Phillip Jordan Benjamin Kosnik
Wcoercion option Manuel López-Ibáñez Ian Lance Taylor