aboutsummaryrefslogtreecommitdiff
path: root/gcc/selftest-run-tests.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-12-12 01:31:30 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-12-12 01:31:30 +0000
commit421b29d6153301fdaee458a1dc7e3a254e6a662a (patch)
treeb27018e1eb914a962a27cfb2ca93872533a85971 /gcc/selftest-run-tests.c
parentcd147a267f57a7345767950ed4897d65424e838d (diff)
downloadgcc-421b29d6153301fdaee458a1dc7e3a254e6a662a.zip
gcc-421b29d6153301fdaee458a1dc7e3a254e6a662a.tar.gz
gcc-421b29d6153301fdaee458a1dc7e3a254e6a662a.tar.bz2
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. From-SVN: r255563
Diffstat (limited to 'gcc/selftest-run-tests.c')
-rw-r--r--gcc/selftest-run-tests.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/gcc/selftest-run-tests.c b/gcc/selftest-run-tests.c
index d57ba99..63d6e07 100644
--- a/gcc/selftest-run-tests.c
+++ b/gcc/selftest-run-tests.c
@@ -48,7 +48,7 @@ selftest::run_tests ()
option-handling. */
path_to_selftest_files = flag_self_test;
- long start_time = get_run_time ();
+ test_runner r ("-fself-test");
/* Run all the tests, in hand-coded order of (approximate) dependencies:
run the tests for lowest-level code first. */
@@ -109,14 +109,7 @@ selftest::run_tests ()
failed to be finalized can be detected by valgrind. */
forcibly_ggc_collect ();
- /* Finished running tests. */
- long finish_time = get_run_time ();
- long elapsed_time = finish_time - start_time;
-
- fprintf (stderr,
- "-fself-test: %i pass(es) in %ld.%06ld seconds\n",
- num_passes,
- elapsed_time / 1000000, elapsed_time % 1000000);
+ /* Finished running tests; the test_runner dtor will print a summary. */
}
#endif /* #if CHECKING_P */