[cfe-dev] A tool for generating reduced headers for test cases (delta debugging)
Ted Kremenek
kremenek at apple.com
Wed Jul 9 09:46:42 PDT 2008
On Jul 9, 2008, at 9:16 AM, Eli Friedman wrote:
> On Wed, Jul 9, 2008 at 1:49 AM, Nikita Zhuk <nikita at zhuk.fi> wrote:
>> Hi,
>>
>> Several clang analysis test cases written in ObjC contain the
>> following comment line in their header: "These declarations were
>> reduced using Delta-Debugging from Foundation.h on Mac OS X.". Are
>> there some instructions about tools which should be used to generate
>> such reduced headers?
>
> If I'm not mistaken, the steps are just to generate a full file with
> clang -E, then reduce the file using Delta (http://delta.tigris.org/).
> But Ted should be able to comment with more complete steps.
That's exactly right.
The Delta tool requires a user-provided script that discerns a "test
case" between good and bad, and tries to remove pieces from the test
case (which is any text file) until a minimal test case is generated
that is still "good".
In the case of header file reduction, I'm working with two files:
t.i (the preprocessed header goop that I want to reduce)
t.c (the file that includes t.i)
The "test case" is t.i, and the my script (called "detect_error.pl")
classifies a version of t.i as good or bad by doing the following:
1) If "gcc -fsyntax-only t.c" fails, the test case is BAD.
2) if "clang -fsyntax-only t.c" fails, the case is BAD.
3) Otherwise, the test case is GOOD.
The trick is identifying what is failure: gcc emiting warnings, gcc or
clang crashing, etc.
Delta-debugging then whittles down t.i until it cannot make it any
smaller. Once it reduces t.i, I just include the contents of t.i
inside t.c (or t.m, or whatever).
>> Being able to do so would make it possible to
>> report bugs by using runnable test cases, and those test cases could
>> be eventually included with the clang itself.
I can certainly clean up the detect_error.pl script and post it the
website with directions.
> Reducing out Foundation.h only really helps for non-runnable
> testcases; the presence of Foundation.h is a pretty good indicator of
> the presence of the Foundation classes. :)
Exactly. In general, header reduction might be good for filing any
kind of test case against Clang that depends on system/library-
specific APIs.
More information about the cfe-dev
mailing list