From b88e456f7e3e6d8c354da57d3e77a98575070ee8 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 29 Oct 2021 14:11:08 +0200 Subject: [PATCH] [gdb/build] Fix build with --disable-unit-tests A build with --disable-unit-tests currently run into: ... ld: maint.o: in function \ `maintenance_selftest_completer(cmd_list_element*, completion_tracker&, char const*, char const*)': src/gdb/maint.c:1183: undefined reference to \ `selftests::for_each_selftest( gdb::function_view< void (std::__cxx11::basic_string, std::allocator > const&)>)' ... Fix this by guarding the call to selftests::for_each_selftest in maintenance_selftest_completer with GDB_SELF_TEST, such that the "-verbose" completion still works. Rebuild on x86_64-linux and ran gdb.gdb/unittest.exp. --- gdb/maint.c | 2 ++ gdb/testsuite/gdb.gdb/unittest.exp | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gdb/maint.c b/gdb/maint.c index 85fa18c34a0..bcc71aab579 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -1180,11 +1180,13 @@ maintenance_selftest_completer (cmd_list_element *cmd, (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp)) return; +#if GDB_SELF_TEST selftests::for_each_selftest ([&tracker, text] (const std::string &name) { if (startswith (name.c_str (), text)) tracker.add_completion (make_unique_xstrdup (name.c_str ())); }); +#endif } static void diff --git a/gdb/testsuite/gdb.gdb/unittest.exp b/gdb/testsuite/gdb.gdb/unittest.exp index 0ddd2068377..bcb4bbd2a82 100644 --- a/gdb/testsuite/gdb.gdb/unittest.exp +++ b/gdb/testsuite/gdb.gdb/unittest.exp @@ -40,6 +40,7 @@ proc run_selftests { binfile } { clean_restart ${binfile} } + set enabled 1 set test "maintenance selftest" gdb_test_multiple $test $test { -re ".*Running selftest \[^\n\r\]+\." { @@ -57,23 +58,35 @@ proc run_selftests { binfile } { } -re "Selftests have been disabled for this build.\r\n$gdb_prompt $" { unsupported $test + set enabled 0 } } + + return $enabled } # Test completion of command "maintenance selftest". proc_with_prefix test_completion {} { + global self_tests_enabled + clean_restart - test_gdb_complete_tab_multiple "maintenance selftest string_v" "" \ - {string_vappendf string_view string_vprintf} - test_gdb_complete_tab_unique "maintenance selftest string_vie" "maintenance selftest string_view" " " + + if { $self_tests_enabled } { + test_gdb_complete_tab_multiple "maintenance selftest string_v" "" \ + {string_vappendf string_view string_vprintf} + test_gdb_complete_tab_unique "maintenance selftest string_vie" \ + "maintenance selftest string_view" " " + } else { + test_gdb_complete_tab_none "maintenance selftest string_v" + test_gdb_complete_tab_none "maintenance selftest string_vie" + } test_gdb_complete_tab_unique "maintenance selftest -ver" "maintenance selftest -verbose" " " test_gdb_complete_tab_none "maintenance selftest name_that_does_not_exist" } with_test_prefix "no executable loaded" { - run_selftests "" + set self_tests_enabled [run_selftests ""] } with_test_prefix "executable loaded" {