From 866b34a12df543caae10dd5a8de988e40ee012cd Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 28 Jul 2020 15:07:44 +0200 Subject: [PATCH] [gdb/build] Fix Wmaybe-uninitialized in gdb_optional.h When building with CFLAGS/CXXFLAGS="-O2 -g -Wall", we run into: ... In file included from src/gdb/exceptions.h:23, from src/gdb/utils.h:24, from src/gdb/defs.h:630, from src/gdb/record-btrace.c:22: src/gdb/ui-out.h: In function 'void btrace_insn_history(ui_out*, \ const btrace_thread_info*, const btrace_insn_iterator*, \ const btrace_insn_iterator*, gdb_disassembly_flags)': src/gdb/ui-out.h:352:18: warning: \ 'asm_list.ui_out_emit_type::m_uiout' may be used \ uninitialized in this function [-Wmaybe-uninitialized] 352 | m_uiout->end (Type); | ~~~~~~~~~~~~~^~~~~~ src/gdb/record-btrace.c:795:35: note: \ 'asm_list.ui_out_emit_type::m_uiout' was declared here 795 | gdb::optional asm_list; | ^~~~~~~~ ... This is reported as PR gcc/80635 - "[8/9/10/11 regression] std::optional and bogus -Wmaybe-uninitialized warning". Silence the warning by using the workaround suggested here ( https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635#c53 ): ... union { struct { } m_dummy; T m_item; + volatile char dont_use; // Silences -Wmaybe-uninitialized warning. }; ... Build on x86_64-linux. gdbsupport/ChangeLog: 2020-07-28 Tom de Vries PR build/26281 * gdb_optional.h (class optional): Add volatile member to union contaning m_dummy and m_item. --- gdbsupport/ChangeLog | 6 ++++++ gdbsupport/gdb_optional.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index 6b555cb9704..45c2ce70a31 100644 --- a/gdbsupport/ChangeLog +++ b/gdbsupport/ChangeLog @@ -1,3 +1,9 @@ +2020-07-28 Tom de Vries + + PR build/26281 + * gdb_optional.h (class optional): Add volatile member to union + contaning m_dummy and m_item. + 2020-07-17 Andrew Burgess * tdesc.h (struct target_desc_deleter): Moved here diff --git a/gdbsupport/gdb_optional.h b/gdbsupport/gdb_optional.h index 02a87f6ee48..ef6760df60b 100644 --- a/gdbsupport/gdb_optional.h +++ b/gdbsupport/gdb_optional.h @@ -208,6 +208,8 @@ private: { struct { } m_dummy; T m_item; + volatile char dont_use; /* Silences -Wmaybe-uninitialized warning, see + PR gcc/80635. */ }; /* True if the object was ever emplaced. */ -- 2.30.2