https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109448
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|_M_exception_object’ may be |[12/13 Regression] wrong
|used uninitialized |uninitialized warning with
|[-Werror=maybe-uninitialize |std::variant of an empty
|d] |class and
| |std::exception_ptr
Target Milestone|--- |12.3
Known to fail| |12.1.0
Known to work| |11.3.0
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Reduced further:
```
#include <variant>
#include <cassert>
#include <exception>
#include <atomic>
struct Empty {};
struct Try {
Try() = default;
~Try() = default;
Try(Empty a): _value(a){}
Try(Try&& other) = default;
Try& operator=(Try&& other) = default;
std::variant<Empty, std::exception_ptr> _value;
};
struct TestPromise {
void setResult(Try&& value) {
if(_state != 0) __builtin_abort();
_try_value = std::move(value);
}
std::atomic<int> _state = 0;
Try _try_value;
};
int main() {
TestPromise promise;
promise.setResult(Empty());
}
```