From beadd3e84ed8e652015f07eb4734a6d3b17e79cb Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sun, 25 Aug 2019 18:09:47 -0400 Subject: dwarf2read: replace gdb::optional with enum gdb::optional 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. --- gdb/ChangeLog | 6 ++++++ gdb/dwarf2read.c | 15 ++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cbb8334..5f64ca6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2019-08-25 Simon Marchi + + * 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 * gdb/rx-tdep.c (rx_register_names): New. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index de9755f..a0b989f 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -5843,7 +5843,11 @@ dw2_debug_names_iterator::next () return NULL; } const mapped_debug_names::index_val &indexval = indexval_it->second; - gdb::optional is_static; + enum class symbol_linkage { + unknown, + static_, + extern_, + } symbol_linkage = symbol_linkage::unknown; dwarf2_per_cu_data *per_cu = NULL; 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: if (!m_map.augmentation_is_gdb) break; - is_static = true; + symbol_linkage = symbol_linkage::static_; break; case DW_IDX_GNU_external: if (!m_map.augmentation_is_gdb) break; - is_static = false; + symbol_linkage = symbol_linkage::extern_; break; } } @@ -5910,10 +5914,11 @@ dw2_debug_names_iterator::next () goto again; /* 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; - if (want_static != *is_static) + const bool symbol_is_static = symbol_linkage == symbol_linkage::static_; + if (want_static != symbol_is_static) goto again; } -- cgit v1.1