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());
}
```

Reply via email to