https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117924
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
```
_GLIBCXX20_CONSTEXPR
_Bit_type*
_M_end_addr() const _GLIBCXX_NOEXCEPT
{
if (this->_M_end_of_storage)
return std::__addressof(this->_M_end_of_storage[-1]) + 1;
return 0;
}
...
_GLIBCXX20_CONSTEXPR
void
_M_deallocate()
{
if (_M_impl._M_start._M_p)
{
const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p;
_Bit_alloc_traits::deallocate(_M_impl,
_M_impl._M_end_of_storage - __n,
__n);
_M_impl._M_reset();
}
}
```
I don't get why we just don't call _Bit_alloc_traits::deallocate on
_M_impl._M_start._M_p here instead of `_M_impl._M_end_of_storage - __n`. Unless
I am missing something with respect to allocator traits.
That was changed with r5-4575-gccd615e3fdf2d2 ; which was the move to support
C++11 allocator requirements. But I would expect all allocators should produce
`e - (e - b)` as being b always. and `_M_end_of_storage - __n` I would hope
being always _M_impl._M_start._M_p too. Unless I miss something here.