[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[csmith-dev] manual test case reduction



The next step after finding a failing program with csmith is to minimize the program. Regehr just posted a blog entry about delta debugging. Here is my manual algorithm, which i ended up with after fixing some libfirm bugs.

"Try" means remove one by one and check, if the program still fails.

1. Instead of test.c use the preprocessed file to get rid of
   dependencies (runtime/csmith.h).
2. Identify the function (e.g. func_10) where compiler fails (via gdb)
3. Try to set all other func_XX and main to { return 0; }
   So far i only care about compilation failures. If the generated
   program does the wrong stuff, you probably want to keep the main
   function with all the checksum printing.
4. Try to remove calls from func_10
   I do not remove the arguments, so "func_1(x,y)" => "(x,y)".
5. Try to reduce the control flow graph
   1. Remove "else", "continue", "break", "goto XX"
   2. Remove "if (...)", "for (...)", "while (...)"
6. Try to remove calculations (assignments)
7. Try to simplify the control flow graph
   Shorten conditions in remaining if/for/while statements
8. Try to remove variables
   Start from the end of the function, since the removal of a
   declaration could enable the removal of another one.
   Also, try to reuse variables to enable removals.
9. Try to use basic data types. "uint64" => "long long" => "int".
   Ideally, only ints are left afterwards. No "volatile", no "const".
10.Now remove stuff, which is not used by func_10 anymore, which
   usually includes all stuff, which was included, and all func_XX
   functions.

Now the program should only consist of a main, which does nothing, and func_10, which is hopefully small. Here is an example, which now lives in our testsuite:
http://pp.info.uni-karlsruhe.de/cgi-bin/cgit.cgi/firm-testsuite/plain/opt/ldst.c

Maybe this helps with your work on test case reduction? Maybe someone has a suggestion to improve my workflow?

--
Andreas Zwinkau

 Karlsruhe Institute of Technology (KIT)
 Institut für Programmstrukturen und Datenorganisation (IPD)
 Lehrstuhl Prof. Snelting
 Adenauerring 20a
 76131 Karlsruhe

 Phone:  +49 721 608 48351
 Fax:    +49 721 608 48457
 Email:  zwinkau@kit.edu
 Web:    http://pp.info.uni-karlsruhe.de/person.php?id=107

 KIT – University of the State of Baden-Wuerttemberg and
 National Research Center of the Helmholtz Association