[gdb/build] Fix Wmaybe-uninitialized in gdb_optional.h
authorTom de Vries <tdevries@suse.de>
Tue, 28 Jul 2020 13:07:44 +0000 (15:07 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 28 Jul 2020 13:07:44 +0000 (15:07 +0200)
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<ui_out_type_list>::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<ui_out_type_list>::m_uiout' was declared here
  795 |   gdb::optional<ui_out_emit_list> 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  <tdevries@suse.de>

PR build/26281
* gdb_optional.h (class optional): Add volatile member to union
contaning m_dummy and m_item.

gdbsupport/ChangeLog
gdbsupport/gdb_optional.h

index 6b555cb97042f55e94b89d68db58f43c5675e328..45c2ce70a31ddfad7557290e4e9ab6a79c79351d 100644 (file)
@@ -1,3 +1,9 @@
+2020-07-28  Tom de Vries  <tdevries@suse.de>
+
+       PR build/26281
+       * gdb_optional.h (class optional): Add volatile member to union
+       contaning m_dummy and m_item.
+
 2020-07-17  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * tdesc.h (struct target_desc_deleter): Moved here
index 02a87f6ee484ed0de64193d089ff979d7b66349d..ef6760df60b756b3d0cfed2174523848cb6b7d93 100644 (file)
@@ -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.  */