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

    <tr>
        <th>Summary</th>
        <td>
            [libc++] std::shared_ptr::reset() should catch being reset to its own pointer
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++,
            hardening
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            var-const
      </td>
    </tr>

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

<pre>
    https://compiler-explorer.com/z/s58er4o4z

```c++
#include <memory>

int main() {
    auto p = std::make_shared<int>(42);
 p.reset(p.get()); // Incorrect use of reset
}
```

libstdc++ catches that with

```
Assertion '__p == nullptr || __p != _M_ptr' failed.
```

I think it would be really easy to add this check in libc++ too.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8k9GOqzgMhp_G3FhF4EApF1z0tFvpXOwzVCFxS3ZCgpIws52nXwEdTTVaHSkiCo6t_3c-yxjN3TF3UP8ConcZdsq7mIAI6nMm5zT40FltvHOc9V4_uiGlKYI4Al2ALsqPk7EcdvzvZH3gkCs_Al0-gS6xPnCofPUJxRmK4_O7L7algH4ta_tLwjhlZ80I4jTy6MMDxF-vicYlHKVxQAegFqF5piIiyjl5nBDEGWPSizhxHOUbX-MgA2sQJ-PSUo8OFQG1IL6Spzxw5AR0mPL7ui_h9QZuDvG3Uz4EVgnnyOhvuGVs0przD1uvkq3pY9JPo6hkUgNHTINM-GHS8L9t2Y7HGDkk4x0CNdfram1x52ZrpxQQmhM0J1wjVC6R69_XKQWgBm_SWNb5H3T9xjQY94Ym4YefrcaeMbC09oEs4wOTR6n1cimiGli9oXFoTf_lJHmfZ7oTuhWtzLgrm6Jum7o9tNnQlUKS5KZvi55Vf6NCiKJUqmk13Zq63Wemo4KqoiRRUCmKNq-rUu_bW3vjPZe6rqAqeJTG5ta-j7kP98zEOHPXtMVBZFb2bOMT2G9RC7F0AqJBBs3OuPuT4dAtZXb9fI9QFdbEFL8LJ5PsCv9LofoFoo2ftbPr-QuWhcA4rL1bnxV7Nu6-kbG0z6SI_sPh5I1LHLI52B-DczdpmPvntCx6nttuCv4fVgnosrqOQJfV-H8BAAD__7PUFNk">