Csmith is a tool that can generate random C programs that statically and dynamically conform to the C99 standard. It is useful for stress-testing compilers, static analyzers, and other tools that process C code. Csmith has found bugs in every tool that it has tested, and we have used it to find and report more than 400 previously-unknown compiler bugs.
Mit Csmith haben wir auch in unserem Compiler einige Bugs entdeckt. Der Ansatz zufällig generierte Programme zum Testen zu benutzen ist in der Praxis erprobt. Wenn Csmith ein Programm generiert hat, welches einen Bug im Compiler demonstriert, kann man dieses gut in die Regression Testsuite stecken (Beispiel).
Problematisch ist allerdings, dass diese Testprogramme immer im Kontext des ganzen Compilers laufen. Manchmal "repariert" eine Änderung in einer vorgelagerten Phase einen Testfall ohne, dass der eigentliche Fehler behoben wäre. Stattdessen hat sich die Zwischendarstellung (Intermediate Representation: IR) nur leicht verändert und die Optimierung verhält sich leicht anders.
Aufgabe:
Die Idee für diese Arbeit ist nun den Ansatz von Csmith von C-Programmen auf IR-Graphen zu portieren. Dazu soll ein Tool entwickelt werden, welches zufällige, aber möglichst valide, IR-Graphen generiert. Anschließend werden einzelne oder mehrere Optimierungen zum Testen darauf ausgeführt.
Ein Offene Frage ist noch, wie zu einem gefundenen Fehler ein Regression Test generiert werden kann. Möglich wäre den Firm-Graph-Dumper zu verwenden oder C-Programme, welche die Firm-API verwenden.
Schlüsselworte
Compiler, Firm, Csmith, Testing, Random Generator Veröffentlichungen
Veröffentlichung |
FirmSmith: Test Generation for Compiler Optimizations |
Betreuer
Ehemalige Mitarbeiter |
---|
Dr.-Ing. Andreas Zwinkau |
Studenten
Ehemalige Studenten |
---|
Jeff Wagner |