<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/123347>123347</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            17 Regression: over optimization at -O2
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          NewSigma
      </td>
    </tr>
</table>

<pre>
    godbolt: https://godbolt.org/z/4xEEz6fsY

```
#include <iostream>
#include <coroutine>
#include <utility>
#include <vector>

struct Promise {
 std::vector<int> obj;

    ~Promise() {
        std::cout << "~Promise: " << obj.data() << std::endl;
    }

    auto get_return_object() { return std::coroutine_handle<Promise>::from_promise(*this); };
 std::suspend_never initial_suspend() noexcept { return {}; }
 std::suspend_never final_suspend() noexcept { return {}; }
 std::suspend_always yield_value(std::vector<int> b) noexcept {
        obj = std::move(b);
        return {};
    }
    void return_void() noexcept {}
    void unhandled_exception() {}
};

struct coro {
    using promise_type = Promise;

    std::vector<int> arr;
 std::coroutine_handle<Promise> handle;

 coro(std::coroutine_handle<Promise> handle_) noexcept {
        handle = handle_;
        arr = std::move(handle_.promise().obj);
    }
};

coro fn() {
    co_yield std::vector<int>(1);
}

int main(int argc, char** argv) {
    coro cr = fn();
    std::cout << "main: " << cr.arr.data() << std::endl;
    cr.handle.resume();
    return 0;
}
```

The code works fine using clang 16, but it breaks using 17 ~ trunk.

Possible wrong result(-O2):
main: 0x61c7ada362f0
~Promise: 0x61c7ada362f0

Expected result(-O0):
main: 0x61c7ada362f0
~Promise: 0

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVk2P4jgQ_TXmYnWU2JDAIYc0Dced0e5e9hQ5ThHc7djIH9D0YX77yvmAQDejXmlRJIKr_OpV1XMZZq1oFECOFs9o8TJj3u21yf-A01-iadms0vU5b3RdaekQLfDeuYNFtEBki8h2METaNIhsPxDZzt83m490Z_9BcRGeNB6euECECsWlrwEjuhbaOgOsRXTzyca10d4JBV8ZvRNSuPNXpiNwp81giQvrjOcO_zS6FRYwyp5RXGDr6sCfFqP3WiiH6Abr6hXR534rxhj_GjYiskRkNW4fPhcUrr0LsRFdY0TIZRMtws_RoqvXqGaOjVj96gUEVC372AEbZS9XFsw7jRtwpQHnjSp19QrcXTnhfn1KaCheuWeqloDo-sJp07vsjG7LwyS7wu2FRWSF6HMXnd5Wynp7AFWXCo5gsFDCCSbLYXWgojS8czi4KadQsg5tSOkR4k6o_wmPyRM7W3wWIOvyyKQP-T3seHUfaNJgXb1iRF-uIVp9DGBVX6aJ5z25my6Gt6MW9eBVhvcvMrxz9qrvXV32LkKriQp7eYyxrkIPnZ9k4a1QDR7aXLrzAbqELmKYSP1hhZgx92L4rb7wuDaCB-9pC76zu_xNW3qPLpHR-aYZzJgv2zY4R1PVr6Jw5Kft_FzarqY79WkGcF12IntYOkSWyQX7cqKFcrhlIuCFV2Yajsga8z0ziBSIFGHpeB_KaMz7tEYmV8qPBlEX5XYIcRMxY74_h7iJ-rJFBqxv4T70IPz4JsfpwI-Lv_eAua4Bn7R5s-Ggw6BLLplqcJKG9CvvsHC4MsDe7GBPMvwLO-PVW9RD_dTWikoCPhmtGhwoyTAHn36QjlXwGZOO39OEZ6xmNCW7QGU6lj8ZUVxs3g_AHdRT2Pg_wqK4mNU5rVd0xWaQJxnNEkIXdDnb5ySlyZyxmi6ShPOULKr5jqU7yuqYpBmPZyInMVnESZIl82S5WEbL3bKiqzldpatFTCqG5jG0TMhIymMbLtyZsNZDnhBK59lMsgqk7W5xQhSccGdFhIRL3eRh01PlG4vmsRTW2SuME04GtvhPaAxYG2YNLbAOg1kfnGjFBwsDCDOHn36QmTcyv_sXINzeVxHXLSLbgDt8PR2M7i-rbcfGIrId6B5z8m8AAAD__5jKgc0">