diff options
author | Pedro Alves <palves@redhat.com> | 2018-06-19 18:16:40 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2018-06-19 18:16:40 +0100 |
commit | 6ae502670996ec6e8b574dbaa4577d79fa9e9799 (patch) | |
tree | 7a45a150dad6d206a8eb32299a32732483e47fbb /gdb/testsuite | |
parent | 61b04dd04ac2c64d455bc6e17f08a106305b06b3 (diff) | |
download | gdb-6ae502670996ec6e8b574dbaa4577d79fa9e9799.zip gdb-6ae502670996ec6e8b574dbaa4577d79fa9e9799.tar.gz gdb-6ae502670996ec6e8b574dbaa4577d79fa9e9799.tar.bz2 |
Silence -Wmaybe-uninitialized warning in minsyms.c:lookup_minimal_symbol_by_pc_section
Compiling with GCC 8.1 shows this warning:
gdb/minsyms.c: In function 'bound_minimal_symbol lookup_minimal_symbol_by_pc_section(CORE_ADDR, obj_section*, lookup_msym_prefer)':
gdb/minsyms.c:825:40: warning: 'want_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
&& MSYMBOL_TYPE (&msymbol[hi]) != want_type
That warning is a false positive, because the switch that converts
enum lookup_msym_prefer values to enum enum minimal_symbol_type values
has a case for every lookup_msym_prefer enumerator:
switch (prefer)
{
case lookup_msym_prefer::TEXT:
want_type = mst_text;
break;
case lookup_msym_prefer::TRAMPOLINE:
want_type = mst_solib_trampoline;
break;
case lookup_msym_prefer::GNU_IFUNC:
want_type = mst_text_gnu_ifunc;
break;
}
The problem is that GCC assumes that enum variables may hold values
other than the named enumerators (like e.g., "lookup_msym_prefer
prefer = (lookup_msym_prefer) 10;").
Rework the code a bit, adding a gdb_assert to make it explicit to the
compiler that want_type is initialized in all normal-return paths.
gdb/ChangeLog:
2018-06-19 Pedro Alves <palves@redhat.com>
* minsyms.c (msym_prefer_to_msym_type): New, factored out from ...
(lookup_minimal_symbol_by_pc_section): ... here with
gdb_assert_not_reached added.
Diffstat (limited to 'gdb/testsuite')
0 files changed, 0 insertions, 0 deletions