Branch data Line data Source code
1 : : /* Implementation of selftests.
2 : : Copyright (C) 2015-2024 Free Software Foundation, Inc.
3 : :
4 : : This file is part of GCC.
5 : :
6 : : GCC is free software; you can redistribute it and/or modify it under
7 : : the terms of the GNU General Public License as published by the Free
8 : : Software Foundation; either version 3, or (at your option) any later
9 : : version.
10 : :
11 : : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : : for more details.
15 : :
16 : : You should have received a copy of the GNU General Public License
17 : : along 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"
24 : : #include "tree.h"
25 : : #include "target.h"
26 : : #include "langhooks.h"
27 : : #include "options.h"
28 : : #include "stringpool.h"
29 : : #include "attribs.h"
30 : : #include "analyzer/analyzer-selftests.h"
31 : : #include "text-art/selftests.h"
32 : :
33 : : /* This function needed to be split out from selftest.cc as it references
34 : : tests from the whole source tree, and so is within
35 : : OBJS in Makefile.in, whereas selftest.o is within OBJS-libcommon.
36 : : This allows us to embed tests within files in OBJS-libcommon without
37 : : introducing a dependency on objects within OBJS. */
38 : :
39 : : #if CHECKING_P
40 : :
41 : : /* Run all tests, aborting if any fail. */
42 : :
43 : : void
44 : 4 : selftest::run_tests ()
45 : : {
46 : : /* Makefile.in has -fself-test=$(srcdir)/testsuite/selftests, so that
47 : : flag_self_test contains the path to the selftest subdirectory of the
48 : : source tree (without a trailing slash). Copy it up to
49 : : path_to_selftest_files, to avoid selftest.cc depending on
50 : : option-handling. */
51 : 4 : path_to_selftest_files = flag_self_test;
52 : :
53 : 4 : test_runner r ("-fself-test");
54 : :
55 : : /* Run all the tests, in hand-coded order of (approximate) dependencies:
56 : : run the tests for lowest-level code first. */
57 : :
58 : : /* Sanity-check for selftests themselves. */
59 : 4 : selftest_cc_tests ();
60 : :
61 : : /* Low-level data structures. */
62 : 4 : bitmap_cc_tests ();
63 : 4 : sbitmap_cc_tests ();
64 : 4 : dumpfile_cc_tests ();
65 : 4 : et_forest_cc_tests ();
66 : 4 : hash_map_tests_cc_tests ();
67 : 4 : hash_set_tests_cc_tests ();
68 : 4 : vec_cc_tests ();
69 : 4 : pretty_print_cc_tests ();
70 : 4 : wide_int_cc_tests ();
71 : 4 : ggc_tests_cc_tests ();
72 : 4 : sreal_cc_tests ();
73 : 4 : fibonacci_heap_cc_tests ();
74 : 4 : typed_splay_tree_cc_tests ();
75 : 4 : opt_suggestions_cc_tests ();
76 : 4 : opts_cc_tests ();
77 : 4 : json_cc_tests ();
78 : 4 : json_parser_cc_tests ();
79 : 4 : cgraph_cc_tests ();
80 : 4 : optinfo_emit_json_cc_tests ();
81 : 4 : ordered_hash_map_tests_cc_tests ();
82 : 4 : splay_tree_cc_tests ();
83 : :
84 : : /* Mid-level data structures. */
85 : 4 : input_cc_tests ();
86 : 4 : vec_perm_indices_cc_tests ();
87 : 4 : tree_cc_tests ();
88 : 4 : convert_cc_tests ();
89 : 4 : gimple_cc_tests ();
90 : 4 : rtl_tests_cc_tests ();
91 : 4 : read_rtl_function_cc_tests ();
92 : 4 : digraph_cc_tests ();
93 : 4 : tristate_cc_tests ();
94 : 4 : ipa_modref_tree_cc_tests ();
95 : :
96 : : /* Higher-level tests, or for components that other selftests don't
97 : : rely on. */
98 : 4 : diagnostic_color_cc_tests ();
99 : 4 : diagnostic_show_locus_cc_tests ();
100 : 4 : diagnostic_format_json_cc_tests ();
101 : 4 : diagnostic_format_sarif_cc_tests ();
102 : 4 : edit_context_cc_tests ();
103 : 4 : fold_const_cc_tests ();
104 : 4 : spellcheck_cc_tests ();
105 : 4 : spellcheck_tree_cc_tests ();
106 : 4 : tree_cfg_cc_tests ();
107 : 4 : diagnostic_path_cc_tests ();
108 : 4 : simple_diagnostic_path_cc_tests ();
109 : 4 : lazy_diagnostic_path_cc_tests ();
110 : 4 : attribs_cc_tests ();
111 : 4 : opts_diagnostic_cc_tests ();
112 : :
113 : : /* This one relies on most of the above. */
114 : 4 : function_tests_cc_tests ();
115 : :
116 : : /* Run any target-specific selftests. */
117 : 4 : if (targetm.run_target_selftests)
118 : 4 : targetm.run_target_selftests ();
119 : :
120 : 4 : store_merging_cc_tests ();
121 : 4 : predict_cc_tests ();
122 : 4 : simplify_rtx_cc_tests ();
123 : 4 : dbgcnt_cc_tests ();
124 : :
125 : : /* Run any lang-specific selftests. */
126 : 4 : lang_hooks.run_lang_selftests ();
127 : :
128 : 4 : text_art_tests ();
129 : 4 : gcc_urlifier_cc_tests ();
130 : :
131 : : /* Run the analyzer selftests (if enabled). */
132 : 4 : ana::selftest::run_analyzer_selftests ();
133 : :
134 : : /* Force a GC at the end of the selftests, to shake out GC-related
135 : : issues. For example, if any GC-managed items have buggy (or missing)
136 : : finalizers, this last collection will ensure that things that were
137 : : failed to be finalized can be detected by valgrind. */
138 : 4 : ggc_collect (GGC_COLLECT_FORCE);
139 : :
140 : : /* Finished running tests; the test_runner dtor will print a summary. */
141 : 4 : }
142 : :
143 : : #endif /* #if CHECKING_P */
|