This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Expensive selftests: torture testing for fix-it boundary conditions (PR c/82050)
- From: Jeff Law <law at redhat dot com>
- To: David Malcolm <dmalcolm at redhat dot com>, gcc-patches at gcc dot gnu dot org
- Date: Mon, 11 Dec 2017 16:14:29 -0700
- Subject: Re: [PATCH] Expensive selftests: torture testing for fix-it boundary conditions (PR c/82050)
- Authentication-results: sourceware.org; auth=none
- References: <1511897507-26241-1-git-send-email-dmalcolm@redhat.com>
On 11/28/2017 12:31 PM, David Malcolm wrote:
> This patch adds selftest coverage for the fix for PR c/82050 (r255214).
>
> 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).
>
> Successfully bootstrapped®rtested on x86_64-pc-linux-gnu.
>
> OK for trunk?
>
> 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.
OK.
jeff