mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-11 13:02:10 +08:00
dwarf2read: replace gdb::optional<bool> with enum
gdb::optional<bool> is dangerous, because it's easy to do: if (opt_bool) when you actually meant if (*opt_bool) or vice-versa. The first checks if the optional is set, the second checks if the wrapped bool is true. Replace it with an enum that explicitly defines the three possible states. gdb/ChangeLog: * dwarf2read.c (dw2_debug_names_iterator::next): Use enum to represent whether the symbol is static, dynamic, or we don't know.
This commit is contained in:
parent
e3ec872f80
commit
beadd3e84e
@ -1,3 +1,9 @@
|
|||||||
|
2019-08-25 Simon Marchi <simon.marchi@efficios.com>
|
||||||
|
|
||||||
|
* dwarf2read.c (dw2_debug_names_iterator::next): Use enum to
|
||||||
|
represent whether the symbol is static, dynamic, or we don't
|
||||||
|
know.
|
||||||
|
|
||||||
2019-08-25 Yoshinori Sato <ysato@users.sourceforge.jp>
|
2019-08-25 Yoshinori Sato <ysato@users.sourceforge.jp>
|
||||||
|
|
||||||
* gdb/rx-tdep.c (rx_register_names): New.
|
* gdb/rx-tdep.c (rx_register_names): New.
|
||||||
|
@ -5843,7 +5843,11 @@ dw2_debug_names_iterator::next ()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
const mapped_debug_names::index_val &indexval = indexval_it->second;
|
const mapped_debug_names::index_val &indexval = indexval_it->second;
|
||||||
gdb::optional<bool> is_static;
|
enum class symbol_linkage {
|
||||||
|
unknown,
|
||||||
|
static_,
|
||||||
|
extern_,
|
||||||
|
} symbol_linkage = symbol_linkage::unknown;
|
||||||
dwarf2_per_cu_data *per_cu = NULL;
|
dwarf2_per_cu_data *per_cu = NULL;
|
||||||
for (const mapped_debug_names::index_val::attr &attr : indexval.attr_vec)
|
for (const mapped_debug_names::index_val::attr &attr : indexval.attr_vec)
|
||||||
{
|
{
|
||||||
@ -5895,12 +5899,12 @@ dw2_debug_names_iterator::next ()
|
|||||||
case DW_IDX_GNU_internal:
|
case DW_IDX_GNU_internal:
|
||||||
if (!m_map.augmentation_is_gdb)
|
if (!m_map.augmentation_is_gdb)
|
||||||
break;
|
break;
|
||||||
is_static = true;
|
symbol_linkage = symbol_linkage::static_;
|
||||||
break;
|
break;
|
||||||
case DW_IDX_GNU_external:
|
case DW_IDX_GNU_external:
|
||||||
if (!m_map.augmentation_is_gdb)
|
if (!m_map.augmentation_is_gdb)
|
||||||
break;
|
break;
|
||||||
is_static = false;
|
symbol_linkage = symbol_linkage::extern_;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5910,10 +5914,11 @@ dw2_debug_names_iterator::next ()
|
|||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
/* Check static vs global. */
|
/* Check static vs global. */
|
||||||
if (is_static.has_value () && m_block_index.has_value ())
|
if (symbol_linkage != symbol_linkage::unknown && m_block_index.has_value ())
|
||||||
{
|
{
|
||||||
const bool want_static = *m_block_index == STATIC_BLOCK;
|
const bool want_static = *m_block_index == STATIC_BLOCK;
|
||||||
if (want_static != *is_static)
|
const bool symbol_is_static = symbol_linkage == symbol_linkage::static_;
|
||||||
|
if (want_static != symbol_is_static)
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user