Jeff approved the v1 version of this patch here: https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00497.html I believe the subsequent changes are obvious enough to be self-approvable.
Changed in v5: - update ChangeLog path - updated copyright years to include 2020 Changed in v4: - Remove include of gcc-plugin.h - call run_analyzer_selftests directly, rather than via plugin registration; wrap the analyzer selftests in #if ENABLE_ANALYZER - fixup for moves of digraph.cc and tristate.cc from gcc/analyzer to gcc gcc/analyzer/ChangeLog: * analyzer-selftests.cc: New file. * analyzer-selftests.h: New file. --- gcc/analyzer/analyzer-selftests.cc | 60 ++++++++++++++++++++++++++++++ gcc/analyzer/analyzer-selftests.h | 44 ++++++++++++++++++++++ gcc/selftest-run-tests.c | 6 +++ gcc/selftest.h | 2 + 4 files changed, 112 insertions(+) create mode 100644 gcc/analyzer/analyzer-selftests.cc create mode 100644 gcc/analyzer/analyzer-selftests.h diff --git a/gcc/analyzer/analyzer-selftests.cc b/gcc/analyzer/analyzer-selftests.cc new file mode 100644 index 000000000000..5ffacd575aba --- /dev/null +++ b/gcc/analyzer/analyzer-selftests.cc @@ -0,0 +1,60 @@ +/* Selftest support for the analyzer. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + Contributed by David Malcolm <dmalc...@redhat.com>. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "stringpool.h" +#include "analyzer/analyzer.h" +#include "analyzer/analyzer-selftests.h" + +#if CHECKING_P + +namespace selftest { + +/* Build a VAR_DECL named NAME of type TYPE, simulating a file-level + static variable. */ + +tree +build_global_decl (const char *name, tree type) +{ + tree decl = build_decl (UNKNOWN_LOCATION, VAR_DECL, + get_identifier (name), type); + TREE_STATIC (decl) = 1; + return decl; +} + +/* Run all analyzer-specific selftests. */ + +void +run_analyzer_selftests () +{ +#if ENABLE_ANALYZER + analyzer_constraint_manager_cc_tests (); + analyzer_program_point_cc_tests (); + analyzer_program_state_cc_tests (); + analyzer_region_model_cc_tests (); +#endif /* #if ENABLE_ANALYZER */ +} + +} /* end of namespace selftest. */ + +#endif /* #if CHECKING_P */ diff --git a/gcc/analyzer/analyzer-selftests.h b/gcc/analyzer/analyzer-selftests.h new file mode 100644 index 000000000000..6f08aa2b1bc0 --- /dev/null +++ b/gcc/analyzer/analyzer-selftests.h @@ -0,0 +1,44 @@ +/* Selftests for the analyzer. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + Contributed by David Malcolm <dmalc...@redhat.com>. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef GCC_ANALYZER_SELFTESTS_H +#define GCC_ANALYZER_SELFTESTS_H + +#if CHECKING_P + +namespace selftest { + +extern tree build_global_decl (const char *name, tree type); + +extern void run_analyzer_selftests (); + +/* Declarations for specific families of tests (by source file), in + alphabetical order. */ +extern void analyzer_checker_script_cc_tests (); +extern void analyzer_constraint_manager_cc_tests (); +extern void analyzer_program_point_cc_tests (); +extern void analyzer_program_state_cc_tests (); +extern void analyzer_region_model_cc_tests (); + +} /* end of namespace selftest. */ + +#endif /* #if CHECKING_P */ + +#endif /* GCC_ANALYZER_SELFTESTS_H */ diff --git a/gcc/selftest-run-tests.c b/gcc/selftest-run-tests.c index b468e8799d41..e451387ab211 100644 --- a/gcc/selftest-run-tests.c +++ b/gcc/selftest-run-tests.c @@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see #include "options.h" #include "stringpool.h" #include "attribs.h" +#include "analyzer/analyzer-selftests.h" /* This function needed to be split out from selftest.c as it references tests from the whole source tree, and so is within @@ -86,6 +87,8 @@ selftest::run_tests () gimple_c_tests (); rtl_tests_c_tests (); read_rtl_function_c_tests (); + digraph_cc_tests (); + tristate_cc_tests (); /* Higher-level tests, or for components that other selftests don't rely on. */ @@ -115,6 +118,9 @@ selftest::run_tests () /* Run any lang-specific selftests. */ lang_hooks.run_lang_selftests (); + /* Run the analyzer selftests (if enabled). */ + run_analyzer_selftests (); + /* Force a GC at the end of the selftests, to shake out GC-related issues. For example, if any GC-managed items have buggy (or missing) finalizers, this last collection will ensure that things that were diff --git a/gcc/selftest.h b/gcc/selftest.h index e697c8da2e2b..df98e0b5f12c 100644 --- a/gcc/selftest.h +++ b/gcc/selftest.h @@ -228,6 +228,7 @@ extern void convert_c_tests (); extern void diagnostic_c_tests (); extern void diagnostic_format_json_cc_tests (); extern void diagnostic_show_locus_c_tests (); +extern void digraph_cc_tests (); extern void dumpfile_c_tests (); extern void edit_context_c_tests (); extern void et_forest_c_tests (); @@ -258,6 +259,7 @@ extern void store_merging_c_tests (); extern void tree_c_tests (); extern void tree_cfg_c_tests (); extern void tree_diagnostic_path_cc_tests (); +extern void tristate_cc_tests (); extern void typed_splay_tree_c_tests (); extern void unique_ptr_tests_cc_tests (); extern void vec_c_tests (); -- 2.21.0