[Bug middle-end/78044] -Wmaybe-uninitialized and -O2: false positive with boost::optional
akrzemi1 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 6 07:40:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78044
--- Comment #7 from Andrzej Krzemienski <akrzemi1 at gmail dot com> ---
This still reproduces in version 7.2. Here is a Wandbox link:
https://wandbox.org/permlink/5uCAr5u0xpynljhQ
Here is the code, you need to compile it with -DNDEBUG -O2:
```
#include <cassert>
class O
{
int _val;
bool _init = false;
public:
O() = default;
O(const int& i) : _val(i), _init(true) {}
explicit operator bool () const { return _init; }
const int& operator*() const { assert (_init); return _val; }
void operator=(int const& i) { _init = true; _val = i; }
};
bool equal_pointees ( O const& x, O const& y )
{
return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
}
O getitem();
int main(int argc, const char *[])
{
O a = getitem();
O b;
if (argc > 0)
b = argc;
if (equal_pointees(a, b))
return 1;
return 0;
}
```
Is there a way to give a hint to the compiler (like with an attribute) so that
the warning is silenced?
More information about the Gcc-bugs
mailing list