[Bug rtl-optimization/95405] Unnecessary stores with std::optional
glisse at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Jun 6 18:07:56 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95405
--- Comment #3 from Marc Glisse <glisse at gcc dot gnu.org> ---
For a self-contained version, see below. Notice how the extra constructor in
_Optional_payload_base changes the generated code, or storing directly a
_Optional_payload_base instead of _Optional_payload in optional
struct _Optional_payload_base {
long _M_value;
bool _M_engaged = false;
_Optional_payload_base() = default;
~_Optional_payload_base() = default;
_Optional_payload_base(const _Optional_payload_base&) = default;
_Optional_payload_base(_Optional_payload_base&&) = default;
_Optional_payload_base(double,float);
};
struct _Optional_payload : _Optional_payload_base { };
struct optional
{
_Optional_payload _M_payload;
};
optional foo();
long bar()
{
auto r = foo();
if (r._M_payload._M_engaged)
return r._M_payload._M_value;
else
return 0L;
}
More information about the Gcc-bugs
mailing list