[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<char,std::char_traits<char>,
                                       std::allocator<char> > 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.
This commit is contained in:
Tom de Vries 2021-10-29 14:11:08 +02:00
parent 91b7c7e522
commit b88e456f7e
2 changed files with 19 additions and 4 deletions

View File

@ -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

View File

@ -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" {