public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/109561] New: -Wmaybe-uninitialized false positive false positive false positive false positive false positive
@ 2023-04-20  1:34 f.heckenbach@fh-soft.de
  2023-04-20  6:55 ` [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional rguenth at gcc dot gnu.org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: f.heckenbach@fh-soft.de @ 2023-04-20  1:34 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109561

            Bug ID: 109561
           Summary: -Wmaybe-uninitialized false positive false positive
                    false positive false positive false positive
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: f.heckenbach@fh-soft.de
  Target Milestone: ---

(code and error below)

I don't know how to put this nicely, this is a terrible message:

- Most of it consists of standard library internals.

- The actual message ("may be used uninitialized") is buried well within it and
also refers to internal fields.

- It is reported no less than 5 times!?

- Most of all, AFAICS, it's bogus. The default constructor of std::optional
should construct an object that does not contain a value and such objects can
be copied just fine.

- Like many such bogus warnings apparently, it's rather volatile. Unrelated
changes, e.g. to i or removing the defaulted constructor declaration, can make
it disappear. Producing this minimal example was a lot of guesswork what can be
removed in which order without disturbing the message.

- It's a regression from 10.2.1 and 11.3.

% cat test.cpp
#include <optional>
#include <vector>
#include <string>

struct O
{
  std::optional <int> i;
  std::optional <std::string> s;
  O () = default;
};

std::vector <O> a;

void f ()
{
  for (auto &i: a)
    i = { };
}
% g++ --std=c++20 -O2 -Wall -c test.cpp
In file included from /usr/include/c++/12/string:53,
                 from test.cpp:3:
In member function ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::pointer std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_data()
const [with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’,
    inlined from ‘constexpr bool std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::_M_is_local() const [with _CharT = char; _Traits =
std::char_traits<char>; _Alloc = std::allocator<char>]’ at
/usr/include/c++/12/bits/basic_string.h:274:23,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::operator=(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with
_CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:859:23,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:194:19,
    inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>&
std::_Optional_payload<_Tp, true, false,
false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp
= std::__cxx11::basic_string<char>]’ at /usr/include/c++/12/optional:420:22,
    inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>&
std::_Optional_payload<_Tp, false, _Copy,
_Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp
= std::__cxx11::basic_string<char>; bool _Copy = false; bool _Move = false]’ at
/usr/include/c++/12/optional:436:26,
    inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous>
>& std::_Optional_base<_Tp, <anonymous>, <anonymous>
>::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp =
std::__cxx11::basic_string<char>; bool <anonymous> = false; bool <anonymous> =
false]’ at /usr/include/c++/12/optional:550:23,
    inlined from ‘constexpr std::optional<std::__cxx11::basic_string<char> >&
std::optional<std::__cxx11::basic_string<char>
>::operator=(std::optional<std::__cxx11::basic_string<char> >&&)’ at
/usr/include/c++/12/optional:705:11,
    inlined from ‘constexpr O& O::operator=(O&&)’ at test.cpp:5:8,
    inlined from ‘void f()’ at test.cpp:17:11:
/usr/include/c++/12/bits/basic_string.h:234:28: warning: ‘*(const
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>*)((char*)&<unnamed> + offsetof(O,
O::s.std::optional<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
>::<unnamed>.std::_Optional_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, false,
false>::<unnamed>)).std::__cxx11::basic_string<char>::_M_dataplus.std::__cxx11::basic_string<char>::_Alloc_hider::_M_p’
may be used uninitialized [-Wmaybe-uninitialized]
  234 |       { return _M_dataplus._M_p; }
      |                            ^~~~
test.cpp: In function ‘void f()’:
test.cpp:17:11: note: ‘<anonymous>’ declared here
   17 |     i = { };
      |           ^
In member function ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::size_type std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size()
const [with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::operator=(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with
_CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:866:17,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:194:19,
    inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>&
std::_Optional_payload<_Tp, true, false,
false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp
= std::__cxx11::basic_string<char>]’ at /usr/include/c++/12/optional:420:22,
    inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>&
std::_Optional_payload<_Tp, false, _Copy,
_Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp
= std::__cxx11::basic_string<char>; bool _Copy = false; bool _Move = false]’ at
/usr/include/c++/12/optional:436:26,
    inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous>
>& std::_Optional_base<_Tp, <anonymous>, <anonymous>
>::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp =
std::__cxx11::basic_string<char>; bool <anonymous> = false; bool <anonymous> =
false]’ at /usr/include/c++/12/optional:550:23,
    inlined from ‘constexpr std::optional<std::__cxx11::basic_string<char> >&
std::optional<std::__cxx11::basic_string<char>
>::operator=(std::optional<std::__cxx11::basic_string<char> >&&)’ at
/usr/include/c++/12/optional:705:11,
    inlined from ‘constexpr O& O::operator=(O&&)’ at test.cpp:5:8,
    inlined from ‘void f()’ at test.cpp:17:11:
/usr/include/c++/12/bits/basic_string.h:1064:16: warning: ‘*(const
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>*)((char*)&<unnamed> + offsetof(O,
O::s.std::optional<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
>::<unnamed>.std::_Optional_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, false,
false>::<unnamed>)).std::__cxx11::basic_string<char>::_M_string_length’ may be
used uninitialized [-Wmaybe-uninitialized]
 1064 |       { return _M_string_length; }
      |                ^~~~~~~~~~~~~~~~
test.cpp: In function ‘void f()’:
test.cpp:17:11: note: ‘<anonymous>’ declared here
   17 |     i = { };
      |           ^
In member function ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::size_type std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size()
const [with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::operator=(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with
_CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:866:17,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:194:19,
    inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>&
std::_Optional_payload<_Tp, true, false,
false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp
= std::__cxx11::basic_string<char>]’ at /usr/include/c++/12/optional:420:22,
    inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>&
std::_Optional_payload<_Tp, false, _Copy,
_Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp
= std::__cxx11::basic_string<char>; bool _Copy = false; bool _Move = false]’ at
/usr/include/c++/12/optional:436:26,
    inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous>
>& std::_Optional_base<_Tp, <anonymous>, <anonymous>
>::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp =
std::__cxx11::basic_string<char>; bool <anonymous> = false; bool <anonymous> =
false]’ at /usr/include/c++/12/optional:550:23,
    inlined from ‘constexpr std::optional<std::__cxx11::basic_string<char> >&
std::optional<std::__cxx11::basic_string<char>
>::operator=(std::optional<std::__cxx11::basic_string<char> >&&)’ at
/usr/include/c++/12/optional:705:11,
    inlined from ‘constexpr O& O::operator=(O&&)’ at test.cpp:5:8,
    inlined from ‘void f()’ at test.cpp:17:11:
/usr/include/c++/12/bits/basic_string.h:1064:16: warning: ‘*(const
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>*)((char*)&<unnamed> + offsetof(O,
O::s.std::optional<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
>::<unnamed>.std::_Optional_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, false,
false>::<unnamed>)).std::__cxx11::basic_string<char>::_M_string_length’ may be
used uninitialized [-Wmaybe-uninitialized]
 1064 |       { return _M_string_length; }
      |                ^~~~~~~~~~~~~~~~
test.cpp: In function ‘void f()’:
test.cpp:17:11: note: ‘<anonymous>’ declared here
   17 |     i = { };
      |           ^
In member function ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::size_type std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::length() const [with _CharT = char; _Traits = std::char_traits<char>;
_Alloc = std::allocator<char>]’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&)
[with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:676:22,
    inlined from ‘constexpr void std::_Construct(_Tp*, _Args&& ...) [with _Tp =
__cxx11::basic_string<char>; _Args = {__cxx11::basic_string<char,
char_traits<char>, allocator<char> >}]’ at
/usr/include/c++/12/bits/stl_construct.h:119:7,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_construct(_Args&& ...) [with _Args =
{std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>}; _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:278:19,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:198:26,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:189:7,
    inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>&
std::_Optional_payload<_Tp, true, false,
false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp
= std::__cxx11::basic_string<char>]’ at /usr/include/c++/12/optional:420:22,
    inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>&
std::_Optional_payload<_Tp, false, _Copy,
_Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp
= std::__cxx11::basic_string<char>; bool _Copy = false; bool _Move = false]’ at
/usr/include/c++/12/optional:436:26,
    inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous>
>& std::_Optional_base<_Tp, <anonymous>, <anonymous>
>::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp =
std::__cxx11::basic_string<char>; bool <anonymous> = false; bool <anonymous> =
false]’ at /usr/include/c++/12/optional:550:23,
    inlined from ‘constexpr std::optional<std::__cxx11::basic_string<char> >&
std::optional<std::__cxx11::basic_string<char>
>::operator=(std::optional<std::__cxx11::basic_string<char> >&&)’ at
/usr/include/c++/12/optional:705:11,
    inlined from ‘constexpr O& O::operator=(O&&)’ at test.cpp:5:8,
    inlined from ‘void f()’ at test.cpp:17:11:
/usr/include/c++/12/bits/basic_string.h:1071:16: warning: ‘*(const
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>*)((char*)&<unnamed> + offsetof(O,
O::s.std::optional<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
>::<unnamed>.std::_Optional_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, false,
false>::<unnamed>)).std::__cxx11::basic_string<char>::_M_string_length’ may be
used uninitialized [-Wmaybe-uninitialized]
 1071 |       { return _M_string_length; }
      |                ^~~~~~~~~~~~~~~~
test.cpp: In function ‘void f()’:
test.cpp:17:11: note: ‘<anonymous>’ declared here
   17 |     i = { };
      |           ^
In member function ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::size_type std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::length() const [with _CharT = char; _Traits = std::char_traits<char>;
_Alloc = std::allocator<char>]’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&)
[with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:676:22,
    inlined from ‘constexpr void std::_Construct(_Tp*, _Args&& ...) [with _Tp =
__cxx11::basic_string<char>; _Args = {__cxx11::basic_string<char,
char_traits<char>, allocator<char> >}]’ at
/usr/include/c++/12/bits/stl_construct.h:119:7,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_construct(_Args&& ...) [with _Args =
{std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>}; _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:278:19,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:198:26,
    inlined from ‘constexpr void
std::_Optional_payload_base<_Tp>::_M_move_assign(std::_Optional_payload_base<_Tp>&&)
[with _Tp = std::__cxx11::basic_string<char>]’ at
/usr/include/c++/12/optional:189:7,
    inlined from ‘constexpr std::_Optional_payload<_Tp, true, false, false>&
std::_Optional_payload<_Tp, true, false,
false>::operator=(std::_Optional_payload<_Tp, true, false, false>&&) [with _Tp
= std::__cxx11::basic_string<char>]’ at /usr/include/c++/12/optional:420:22,
    inlined from ‘constexpr std::_Optional_payload<_Tp, false, _Copy, _Move>&
std::_Optional_payload<_Tp, false, _Copy,
_Move>::operator=(std::_Optional_payload<_Tp, false, _Copy, _Move>&&) [with _Tp
= std::__cxx11::basic_string<char>; bool _Copy = false; bool _Move = false]’ at
/usr/include/c++/12/optional:436:26,
    inlined from ‘constexpr std::_Optional_base<_Tp, <anonymous>, <anonymous>
>& std::_Optional_base<_Tp, <anonymous>, <anonymous>
>::operator=(std::_Optional_base<_Tp, <anonymous>, <anonymous> >&&) [with _Tp =
std::__cxx11::basic_string<char>; bool <anonymous> = false; bool <anonymous> =
false]’ at /usr/include/c++/12/optional:550:23,
    inlined from ‘constexpr std::optional<std::__cxx11::basic_string<char> >&
std::optional<std::__cxx11::basic_string<char>
>::operator=(std::optional<std::__cxx11::basic_string<char> >&&)’ at
/usr/include/c++/12/optional:705:11,
    inlined from ‘constexpr O& O::operator=(O&&)’ at test.cpp:5:8,
    inlined from ‘void f()’ at test.cpp:17:11:
/usr/include/c++/12/bits/basic_string.h:1071:16: warning: ‘*(const
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>*)((char*)&<unnamed> + offsetof(O,
O::s.std::optional<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
>::<unnamed>.std::_Optional_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, false,
false>::<unnamed>)).std::__cxx11::basic_string<char>::_M_string_length’ may be
used uninitialized [-Wmaybe-uninitialized]
 1071 |       { return _M_string_length; }
      |                ^~~~~~~~~~~~~~~~
test.cpp: In function ‘void f()’:
test.cpp:17:11: note: ‘<anonymous>’ declared here
   17 |     i = { };
      |           ^

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional
  2023-04-20  1:34 [Bug c++/109561] New: -Wmaybe-uninitialized false positive false positive false positive false positive false positive f.heckenbach@fh-soft.de
@ 2023-04-20  6:55 ` rguenth at gcc dot gnu.org
  2023-04-20  7:09 ` rguenth at gcc dot gnu.org
  2024-05-24  1:44 ` sjames at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-04-20  6:55 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109561

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |13.0
   Last reconfirmed|                            |2023-04-20
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
            Summary|-Wmaybe-uninitialized false |-Wmaybe-uninitialized false
                   |positive false positive     |positive with std::optional
                   |false positive false        |
                   |positive false positive     |

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed with GCC 13.  Almost always a missed optimization in the end ...

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional
  2023-04-20  1:34 [Bug c++/109561] New: -Wmaybe-uninitialized false positive false positive false positive false positive false positive f.heckenbach@fh-soft.de
  2023-04-20  6:55 ` [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional rguenth at gcc dot gnu.org
@ 2023-04-20  7:09 ` rguenth at gcc dot gnu.org
  2024-05-24  1:44 ` sjames at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-04-20  7:09 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109561

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
We diagnose

<bb7>
pretmp_108 = MEM[(const struct basic_string *)&D.58534 + 8B]._M_string_length;

which is guarded by


<bb 5> [local count: 955630225]:
# ivtmp.123_51 = PHI <ivtmp.123_74(34), ivtmp.123_42(4)>
MEM[(struct optional *)&D.58534] ={v} {CLOBBER};
MEM[(union _Storage *)&D.58534] ={v} {CLOBBER};
MEM[(struct _Optional_payload_base *)&D.58534]._M_engaged = 0;
MEM[(struct optional *)&D.58534 + 8B] ={v} {CLOBBER};
MEM[(union _Storage *)&D.58534 + 8B] ={v} {CLOBBER};
MEM[(struct _Optional_payload_base *)&D.58534 + 8B]._M_engaged = 0;
_1 = (void *) ivtmp.123_51;
MEM[(struct optional *)_1 + -24B] = D.58534.i;
_23 = MEM[(bool *)_1 + 16B];
if (_23 != 0)
  goto <bb 6>; [50.00%]
else
  goto <bb 22>; [50.00%]

<bb 6> [local count: 477815112]:
_24 = MEM[(struct _Optional_payload_base &)&D.58534 + 8]._M_engaged;
pretmp_110 = MEM[(char * *)_1 + -16B];
if (_24 != 0)
  goto <bb 7>; [33.00%]
else
  goto <bb 21>; [67.00%]

clearly there's missed CSE of .M_engaged here, but

  MEM[(struct optional *)_1 + -24B] = D.58534.i;

must aliases the location.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional
  2023-04-20  1:34 [Bug c++/109561] New: -Wmaybe-uninitialized false positive false positive false positive false positive false positive f.heckenbach@fh-soft.de
  2023-04-20  6:55 ` [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional rguenth at gcc dot gnu.org
  2023-04-20  7:09 ` rguenth at gcc dot gnu.org
@ 2024-05-24  1:44 ` sjames at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: sjames at gcc dot gnu.org @ 2024-05-24  1:44 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109561

Sam James <sjames at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |sjames at gcc dot gnu.org

--- Comment #3 from Sam James <sjames at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> Confirmed with GCC 13.  Almost always a missed optimization in the end ...

Pff, maybe I should report more of them then. I often end up forgetting and not
bothering to come back to it...

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-05-24  1:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-20  1:34 [Bug c++/109561] New: -Wmaybe-uninitialized false positive false positive false positive false positive false positive f.heckenbach@fh-soft.de
2023-04-20  6:55 ` [Bug tree-optimization/109561] -Wmaybe-uninitialized false positive with std::optional rguenth at gcc dot gnu.org
2023-04-20  7:09 ` rguenth at gcc dot gnu.org
2024-05-24  1:44 ` sjames at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).