24#include "gdbsupport/selftest.h"
25#include <unordered_map>
30static std::unordered_map<const char *, int>
counters;
39static std::mutex complaint_mutex;
51 std::lock_guard<std::mutex> guard (complaint_mutex);
60 (*deprecated_warning_hook) (fmt, args);
100 va_start (args, hook);
128 std::lock_guard<std::mutex> guard (complaint_mutex);
137 gdb_printf (file, _(
"Max number of complaints about incorrect"
138 " symbols is %s.\n"),
150 std::unordered_map<const char *, int> tmp;
151 scoped_restore reset_counters = make_scoped_restore (&
counters, tmp);
152 scoped_restore reset_stop_whining = make_scoped_restore (&
stop_whining, 2);
154#define CHECK_COMPLAINT(STR, CNT) \
157 std::string output; \
158 execute_fn_to_string (output, []() { complaint (STR); }, false); \
159 std::string expected \
160 = _("During symbol reading: ") + std::string (STR "\n"); \
161 SELF_CHECK (output == expected); \
162 SELF_CHECK (counters[STR] == CNT); \
165#define CHECK_COMPLAINT_SILENT(STR, CNT) \
168 std::string output; \
169 execute_fn_to_string (output, []() { complaint (STR); }, false); \
170 SELF_CHECK (output.empty ()); \
171 SELF_CHECK (counters[STR] == CNT); \
174 CHECK_COMPLAINT (
"maintenance complaint 0", 1);
175 CHECK_COMPLAINT (
"maintenance complaint 0", 2);
176 CHECK_COMPLAINT_SILENT (
"maintenance complaint 0", 3);
177 CHECK_COMPLAINT (
"maintenance complaint 1", 1);
179 CHECK_COMPLAINT (
"maintenance complaint 0", 1);
181#undef CHECK_COMPLAINT
182#undef CHECK_COMPLAINT_SILENT
195Set max number of complaints about incorrect symbols."), _(
"\
196Show max number of complaints about incorrect symbols."), NULL,
201 selftests::register_test (
"complaints", selftests::test_complaints);
void static void static complaint_interceptor * g_complaint_interceptor
std::unordered_set< std::string > m_complaints
void static void issue_complaint(const char *, va_list) ATTRIBUTE_PRINTF(1
void(* m_saved_warning_hook)(const char *, va_list) ATTRIBUTE_FPTR_PRINTF(1
struct cmd_list_element * showlist
struct cmd_list_element * setlist
set_show_commands add_setshow_zinteger_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
void _initialize_complaints()
void complaint_internal(const char *fmt,...)
static void complaints_show_value(struct ui_file *file, int from_tty, struct cmd_list_element *cmd, const char *value)
static void wrap_warning_hook(void(*hook)(const char *, va_list),...)
static std::unordered_map< const char *, int > counters
int void(* deprecated_warning_hook)(const char *, va_list) ATTRIBUTE_FPTR_PRINTF(1
void gdb_vprintf(struct ui_file *stream, const char *format, va_list args)
void gdb_printf(struct ui_file *stream, const char *format,...)
void gdb_puts(const char *linebuffer, struct ui_file *stream)