On 11/19/2015 11:44 AM, Bernd Schmidt wrote:
On 11/19/2015 07:08 PM, David Malcolm wrote:
gcc_assert terminates the process and no further testing is done,
whereas the approach the kit tries to run as much of the testsuite as
possible, and then fail if any errors occurred.

Yeah, but let's say someone is working on bitmaps and one of the bitmap
tests fail, it's somewhat unlikely that cfg will also fail (or if it
does, it'll be a consequence of the earlier failure). You debug the
issue, fix it, and run cc1 -fself-test again to see if that sorted it out.

As I said, it's a matter of taste and style and I won't claim that my
way is necessarily the right one, but I do want to see if others feel
the same.
I was originally going to say that immediate abort would be the preferred method of operation, but as I thought more about it....

I think this really is a question of how the tests are likely used. I kind of expect that most of the time they'll be used as part of an early sanity test.

So to continue with the bitmap botch causing a CFG failure, presumably the developer was mucking around in the bitmap code already and when they see the CFG test failure, they're going to suspect they've mucked up the bitmap code in some way.

The first question should then be did the bitmap tests pass or fail and if they passed, then those tests clearly need extending :-)


The patch kit does use a lot of "magic" via macros and C++.

Taking registration/discovery/running in completely the other direction,
another approach could be a completely manual approach, with something
like this in toplev.c:

   bitmap_selftest ();
   et_forest_selftest ();
   /* etc */
   vec_selftest ();

This has the advantage of being explicit, and the disadvantage of
requiring a bit more typing.
The one advantage of explicit registration I see is the ability to order the tests so that the lowest level data structures are tested first, moving to increasingly more complex stuff.

But if we're in a mode of run everything, then ordering won't be that important.

In the end I think I lean towards run everything with automatic registration/discovery. But I still have state worries. Or to put it another way, given a test of tests, we should be able to run them in an arbitrary order with no changes in the expected output or pass/fail results.

jeff

Reply via email to