Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@polymtl.ca>
Cc: gdb-patches@sourceware.org
Subject: Re: Oh dear. I regret to inform you that commit 'RAII-fy make_cleanup_restore_current_thread & friends' might be unfortunate
Date: Thu, 04 May 2017 18:23:00 -0000	[thread overview]
Message-ID: <79511435-a3a8-48f9-2e16-bca8adb1909d@redhat.com> (raw)
In-Reply-To: <6bf88edee0fb17451d44b85bb00fb0d0@polymtl.ca>

On 05/04/2017 07:15 PM, Simon Marchi wrote:
> On 2017-05-04 12:42, Pedro Alves wrote:
>> On 05/04/2017 05:06 PM, gdb-buildbot@sergiodj.net wrote:
>>> g++  -g -O2   -I. -I../../binutils-gdb/gdb
>>> -I../../binutils-gdb/gdb/common -I../../binutils-gdb/gdb/config
>>> -DLOCALEDIR="\"/usr/local/share/locale\"" -DHAVE_CONFIG_H
>>> -I../../binutils-gdb/gdb/../include/opcode
>>> -I../../binutils-gdb/gdb/../opcodes/..
>>> -I../../binutils-gdb/gdb/../readline/..
>>> -I../../binutils-gdb/gdb/../zlib -I../bfd
>>> -I../../binutils-gdb/gdb/../bfd -I../../binutils-gdb/gdb/../include
>>> -I../libdecnumber -I../../binutils-gdb/gdb/../libdecnumber 
>>> -I../../binutils-gdb/gdb/gnulib/import -Ibuild-gnulib/import  
>>> -DTUI=1   -pthread -I/usr/include/guile/2.0 -I/usr/include/python2.7
>>> -I/usr/include/python2.7 -Wall -Wpointer-arith -Wno-unused
>>> -Wunused-value -Wunused-function -Wno-switch -Wno-char-subscripts
>>> -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable
>>> -Wno-sign-compare -Wno-narrowing -Wformat-nonliteral -Werror -c -o
>>> interps.o -MT interps.o -MMD -MP -MF .deps/interps.Tpo
>>> ../../binutils-gdb/gdb/interps.c
>>> In file included from ../../binutils-gdb/gdb/infrun.c:26:0:
>>> ../../binutils-gdb/gdb/inferior.h: In function void
>>> handle_vfork_child_exec_or_exit(int):
>>> ../../binutils-gdb/gdb/inferior.h:553:39: error: *((void*)(&
>>> maybe_restore_inferior)+40).scoped_restore_current_inferior::m_saved_inf
>>> may be used uninitialized in this function [-Werror=maybe-uninitialized]
>>>    { set_current_inferior (m_saved_inf); }
>>>                                        ^
>>> ../../binutils-gdb/gdb/infrun.c:940:6: note: *((void*)(&
>>> maybe_restore_inferior)+40).scoped_restore_current_inferior::m_saved_inf
>>> was declared here
>>>       maybe_restore_inferior;
>>>       ^~~~~~~~~~~~~~~~~~~~~~
>>> In file included from ../../binutils-gdb/gdb/inferior.h:46:0,
>>>                  from ../../binutils-gdb/gdb/infrun.c:26:
>>> ../../binutils-gdb/gdb/progspace.h:274:47: error: *((void*)(&
>>> maybe_restore_inferior)+32).scoped_restore_current_program_space::m_saved_pspace
>>> may be used uninitialized in this function [-Werror=maybe-uninitialized]
>>>    { set_current_program_space (m_saved_pspace); }
>>>                                                ^
>>> ../../binutils-gdb/gdb/infrun.c:940:6: note: *((void*)(&
>>> maybe_restore_inferior)+32).scoped_restore_current_program_space::m_saved_pspace
>>> was declared here
>>>       maybe_restore_inferior;
>>>       ^~~~~~~~~~~~~~~~~~~~~~
>>
>> Fun, looks like gdb::optional related ...
>>
>> Thanks,
>> Pedro Alves
> 
> What do you need to reproduce this?  GCC 7?

The above is g++ 6.3.1, if I can trust the buildslave description page.
I didn't try that release, but gcc master warns the same way.

And, if I hack the code to use std::optional instead of gdb::optional :

diff --git c/gdb/infrun.c w/gdb/infrun.c
index d0504de..11196ee 100644
--- c/gdb/infrun.c
+++ w/gdb/infrun.c
@@ -910,6 +910,8 @@ private:
   scoped_restore_current_inferior m_inferior;
 };
 
+#include <optional>
+
 /* Called whenever we notice an exec or exit event, to handle
    detaching or resuming a vfork parent.  */
 
@@ -936,9 +938,9 @@ handle_vfork_child_exec_or_exit (int exec)
 
          inf->vfork_parent->pending_detach = 0;
 
-         gdb::optional<scoped_restore_exited_inferior>
+         std::optional<scoped_restore_exited_inferior>
            maybe_restore_inferior;
-         gdb::optional<scoped_restore_current_pspace_and_thread>
+         std::optional<scoped_restore_current_pspace_and_thread>
            maybe_restore_thread;
 
          /* If we're handling a child exit, then inferior_ptid points


and compile with -std=gnu++17, I get the exact same warning again...

src/gdb/infrun.c
In file included from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/infrun.c:26:0:
/home/pedro/gdb/mygit/cxx-convertion/src/gdb/inferior.h: In function ‘void handle_vfork_child_exec_or_exit(int)’:
/home/pedro/gdb/mygit/cxx-convertion/src/gdb/inferior.h:553:26: error: ‘*((void*)(& maybe_restore_inferior)+40).scoped_restore_current_inferior::m_saved_inf’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
   { set_current_inferior (m_saved_inf); }
     ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
/home/pedro/gdb/mygit/cxx-convertion/src/gdb/infrun.c:942:6: note: ‘*((void*)(& maybe_restore_inferior)+40).scoped_restore_current_inferior::m_saved_inf’ was declared here
      maybe_restore_inferior;
      ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/inferior.h:46:0,
                 from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/infrun.c:26:
/home/pedro/gdb/mygit/cxx-convertion/src/gdb/progspace.h:274:31: error: ‘*((void*)(& maybe_restore_inferior)+32).scoped_restore_current_program_space::m_saved_pspace’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
   { set_current_program_space (m_saved_pspace); }
     ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
/home/pedro/gdb/mygit/cxx-convertion/src/gdb/infrun.c:942:6: note: ‘*((void*)(& maybe_restore_inferior)+32).scoped_restore_current_program_space::m_saved_pspace’ was declared here
      maybe_restore_inferior;
      ^~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors


AFAICS so far, this is a false positive.

Not sure what to do.  I wouldn't want to force-memset
the optional's storage to work around it, which would be
a pessimization to quiet a warning.  From above, we see that
that wouldn't work when we later start using std::optional.

There's a bug open about this (for boost::optional, but most
probably the exact same):
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78044

Comment #2 makes me think that we should really disable
the warning, or at least make it "-Wno-error=maybe-uninitialized".
I've seen other similar comments around the interwebs when looking
for this warning + optional.

Maybe I could check if the gcc folks plan on doing something to
std::optional to work around this.

Thanks,
Pedro Alves


  reply	other threads:[~2017-05-04 18:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1d6JGc-0000zB-OE@kwanyin.sergiodj.net>
2017-05-04 16:42 ` Pedro Alves
2017-05-04 18:15   ` Simon Marchi
2017-05-04 18:23     ` Pedro Alves [this message]
2017-05-04 18:29       ` Pedro Alves
2017-05-04 21:49         ` Pedro Alves
2017-05-04 22:36           ` Pedro Alves
2017-05-05  0:10       ` [pushed] gdb: Disable -Werror for -Wmaybe-uninitialized (Re: Oh dear. I regret to inform you that commit 'RAII-fy make_cleanup_restore_current_thread & friends' might be unfortunate) Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=79511435-a3a8-48f9-2e16-bca8adb1909d@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@polymtl.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox