https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82050

--- Comment #9 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Tue Dec 12 01:31:30 2017
New Revision: 255563

URL: https://gcc.gnu.org/viewcvs?rev=255563&root=gcc&view=rev
Log:
Expensive selftests: torture testing for fix-it boundary conditions (PR
c/82050)

This patch adds selftest coverage for the fix for PR c/82050.

The selftest iterates over various "interesting" column and line-width
values to try to shake out bugs in the fix-it printing routines, a kind
of "torture" selftest.

Unfortunately this selftest is noticably slower than the other selftests;
adding it to diagnostic-show-locus.c led to:
  -fself-test: 40218 pass(es) in 0.172000 seconds
slowing down to:
  -fself-test: 97315 pass(es) in 6.109000 seconds
for an unoptimized build (e.g. when hacking with --disable-bootstrap).

Given that this affects the compile-edit-test cycle of the "gcc"
subdirectory, this felt like an unacceptable amount of overhead to add.

I attempted to optimize the test by reducing the amount of coverage, but
the test seems useful, and there seems to be a valid role for "torture"
selftests.

Hence this patch adds a:
  gcc.dg/plugin/expensive_selftests_plugin.c
with the responsibility for running "expensive" selftests, and adds the
expensive test there.  The patch moves a small amount of code from
selftest::run_tests into a helper class so that the plugin can print
a useful summary line (to reassure us that the tests are actually being
run).

With that, the compile-edit-test cycle of the "gcc" subdir is unaffected;
the plugin takes:
  expensive_selftests_plugin: 26641 pass(es) in 3.127000 seconds
which seems reasonable within the much longer time taken by "make check"
(I optimized some of the overhead away, hence the reduction from 6 seconds
above down to 3 seconds).

gcc/ChangeLog:
        PR c/82050
        * selftest-run-tests.c (selftest::run_tests): Move start/finish code
        to...
        * selftest.c (selftest::test_runner::test_runner): New ctor.
        (selftest::test_runner::~test_runner): New dtor.
        * selftest.h (class selftest::test_runner): New class.

gcc/testsuite/ChangeLog:
        PR c/82050
        * gcc.dg/plugin/expensive-selftests-1.c: New file.
        * gcc.dg/plugin/expensive_selftests_plugin.c: New file.
        * gcc.dg/plugin/plugin.exp (plugin_test_list): Add the above.


Added:
    trunk/gcc/testsuite/gcc.dg/plugin/expensive-selftests-1.c
    trunk/gcc/testsuite/gcc.dg/plugin/expensive_selftests_plugin.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/selftest-run-tests.c
    trunk/gcc/selftest.c
    trunk/gcc/selftest.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/plugin/plugin.exp

Reply via email to