]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/selftest-run-tests.c
2017-12-07 Tamar Christina <tamar.christina@arm.com>
[thirdparty/gcc.git] / gcc / selftest-run-tests.c
CommitLineData
99b4f3a2 1/* Implementation of selftests.
aad93da1 2 Copyright (C) 2015-2017 Free Software Foundation, Inc.
99b4f3a2 3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
19
20#include "config.h"
21#include "system.h"
22#include "coretypes.h"
23#include "selftest.h"
7af4d06b 24#include "tree.h"
b07ada29 25#include "target.h"
7af4d06b 26#include "langhooks.h"
c081d2fc 27#include "options.h"
99b4f3a2 28
29/* This function needed to be split out from selftest.c as it references
30 tests from the whole source tree, and so is within
31 OBJS in Makefile.in, whereas selftest.o is within OBJS-libcommon.
32 This allows us to embed tests within files in OBJS-libcommon without
33 introducing a dependency on objects within OBJS. */
34
35#if CHECKING_P
36
37/* Run all tests, aborting if any fail. */
38
39void
40selftest::run_tests ()
41{
c081d2fc 42 /* Makefile.in has -fself-test=$(srcdir)/testsuite/selftests, so that
43 flag_self_test contains the path to the selftest subdirectory of the
44 source tree (without a trailing slash). Copy it up to
45 path_to_selftest_files, to avoid selftest.c depending on
46 option-handling. */
47 path_to_selftest_files = flag_self_test;
48
99b4f3a2 49 long start_time = get_run_time ();
50
51 /* Run all the tests, in hand-coded order of (approximate) dependencies:
52 run the tests for lowest-level code first. */
53
363d8665 54 /* Sanity-check for selftests themselves. */
55 selftest_c_tests ();
56
99b4f3a2 57 /* Low-level data structures. */
58 bitmap_c_tests ();
00112593 59 sbitmap_c_tests ();
99b4f3a2 60 et_forest_c_tests ();
61 hash_map_tests_c_tests ();
62 hash_set_tests_c_tests ();
63 vec_c_tests ();
bccee643 64 pretty_print_c_tests ();
99b4f3a2 65 wide_int_cc_tests ();
f61d7248 66 ggc_tests_c_tests ();
f5b88ba1 67 sreal_c_tests ();
77ddb3e5 68 fibonacci_heap_c_tests ();
f1b96af2 69 typed_splay_tree_c_tests ();
b6b04a7b 70 unique_ptr_tests_cc_tests ();
99b4f3a2 71
72 /* Mid-level data structures. */
73 input_c_tests ();
74 tree_c_tests ();
75 gimple_c_tests ();
76 rtl_tests_c_tests ();
836c1c68 77 read_rtl_function_c_tests ();
99b4f3a2 78
79 /* Higher-level tests, or for components that other selftests don't
80 rely on. */
81 diagnostic_show_locus_c_tests ();
6628b04d 82 diagnostic_c_tests ();
fe066ce3 83 edit_context_c_tests ();
99b4f3a2 84 fold_const_c_tests ();
85 spellcheck_c_tests ();
819cba30 86 spellcheck_tree_c_tests ();
99b4f3a2 87 tree_cfg_c_tests ();
88
89 /* This one relies on most of the above. */
90 function_tests_c_tests ();
91
b07ada29 92 /* Run any target-specific selftests. */
93 if (targetm.run_target_selftests)
94 targetm.run_target_selftests ();
95
3d9a2fb3 96 store_merging_c_tests ();
71e39b3b 97 predict_c_tests ();
98d31d3a 98 simplify_rtx_c_tests ();
3d9a2fb3 99
7af4d06b 100 /* Run any lang-specific selftests. */
101 lang_hooks.run_lang_selftests ();
102
09c2dc4c 103 /* Force a GC at the end of the selftests, to shake out GC-related
104 issues. For example, if any GC-managed items have buggy (or missing)
105 finalizers, this last collection will ensure that things that were
106 failed to be finalized can be detected by valgrind. */
107 forcibly_ggc_collect ();
108
99b4f3a2 109 /* Finished running tests. */
110 long finish_time = get_run_time ();
111 long elapsed_time = finish_time - start_time;
112
113 fprintf (stderr,
114 "-fself-test: %i pass(es) in %ld.%06ld seconds\n",
115 num_passes,
116 elapsed_time / 1000000, elapsed_time % 1000000);
117}
118
119#endif /* #if CHECKING_P */