From Fedora Project Wiki

< Features

Revision as of 06:37, 2 June 2011 by Dmalcolm (talk | contribs) (Initial page creation, based on Features/StaticAnalysisOfCPythonExtensions)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

GCC Python Plugins


I have created GCC plugins that embed Python 2 and Python 3 within GCC. Interested developers should be able to use this to easily extend GCC by writing Python scripts, such as adding new warnings for a library that they work on, without needing to use C.


  • Email:

Current status

  • Targeted release: [[Releases/<number> | Fedora <number> ]]
  • Last updated: 2011-06-01
  • Percentage of completion: 20%

Detailed Description

The plugins will allow interested developers to extend GCC in Python 2 and Python 3, without needing to deal with the C internals of GCC.

Example of potential uses include adding new compiler warnings based on:

  • GTK's reference-counting semantics
  • locking in the Linux kernel
  • signal-safety in APIs.
  • malloc/free usage (e.g. use-after-free bugs)
  • array boundary checks

I aim to use the feature to add compile-time checking of the source code to all CPython extension modules in Fedora, as described in Features/StaticAnalysisOfCPythonExtensions

Other ideas include:

  • visualizations of code structure
  • semantic grepping of source code (e.g. "find all invocations of C++ methods named 'draw' that use the default params")

There will be four GCC plugins:

  • a plugin embedding Python 2 (actually dynamically linked against
  • a plugin embedding python 3 (actually dynamically linked against
  • as above, but for the debug builds of Python 2 and Python 3, rather than the optimized builds.

The "upstream" for the plugins will be in this location:

Benefit to Fedora

Fedora is already a very attractive platform for software development. By making it very easy to extend GCC, the plugin makes Fedora even more compelling to developers. The plugin code was written by a Fedora developer, and is a "Fedora Hosted" project.


This involves:

  • writing the plugin
  • packaging it
  • documenting it
  • keeping it in sync with gcc

How To Test

User Experience

Non-technical end-users of Fedora should see no difference.

Developers will be able to invoke Python scripts whilst running GCC by adding these arguments to GCC's command line:

 gcc -fplugin=python2

for a Python 2 script and:

 gcc -fplugin=python3 

for a Python 3 script.


This will require working closely with the gcc maintainer. I anticipate needing to rebuild the plugin each time that gcc is rebuilt.

Contingency Plan


Release Notes

  • GCC plugins that embed Python are now available. These were written by Fedora contributor David Malcolm and

Comments and Discussion