C-Reduce

C-Reduce is a tool that takes a large C or C++ program that has a property of interest (such as triggering a compiler bug) and automatically produces a much smaller C/C++ program that has the same property. It is intended for use by people who discover and report bugs in compilers and other tools that process C/C++ code. C-Reduce is relased under a BSD-like license.

Publications and Presentations

Design

C-Reduce is structured as a fixpoint computation that calls a collection of plugins. It is these plugins that actually transform the test case that is being reduced. C-Reduce is thus very easy to improve and extend. In particular, we believe it would be quite easy to add passes for reducing other programming languages.

Source Code

Installing C-Reduce

Please see our INSTALL file.

C-Reduce has been tested on Mac OS X, FreeBSD, and several versions of Linux.

Using C-Reduce

Run:

creduce ./test1.sh file.c

Where file.c is a C compilation unit that you wish to reduce and test1.sh is a shell script that returns 0 if a partially reduced C program (a "variant") is interesting and non-zero otherwise. The test script takes no arguments; it should be hard-coded to refer to the same C file that is passed as an argument to C-Reduce.

For more details, please see Using C-Reduce.

Related Tools

Current Projects

We are:

Future Projects

If there is demand we might:

If you would find these (or other) features useful, please let us know.

Feedback

If you find C-Reduce to be useful, please let us know. If it does not work, please let us know about that too. There are two mailing lists:

People