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
next prev parent 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