https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107298
Bug ID: 107298 Summary: Failure to compile code with std::optional and ASan/UBSan Product: gcc Version: 12.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: jzwinck at gmail dot com CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org Target Milestone: --- Test case which is expected to compile: #include <optional> std::optional<bool> f(bool cond) { if (cond) { return std::make_optional(true); } return {}; } bool g() { return *f(true); } GCC 10, 11 and 12 all fail to compile this with "-Wall -Wextra -Werror -O2 -fsanitize=undefined": error: '*(unsigned char*)((char*)&<unnamed> + offsetof(std::optional<bool>,std::optional<bool>::<unnamed>.std::_Optional_base<bool, true, true>::<unnamed>))' may be used uninitialized [-Werror=maybe-uninitialized] return {}; Removing std::make_optional or replacing it with std::optional<bool> makes the error go away, though these changes should be irrelevant since they're not on the code path the compiler complains about. Compiling without a sanitizer also works fine. Demo: https://godbolt.org/z/TafE9cxWW