https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110057

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |jwakely.gcc at gmail dot com

--- Comment #12 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to user202729 from comment #11)
>     if (__builtin_vptr(this->_M_impl._M_finish) != __builtin_vptr(_Tp))
>       __builtin_unreachable();

This is more or less what the existing speculative devirtualization code
(ipa-devirt.cc) does.  It might be nice to be able to force speculative
devirtualization in some circumstances, perhaps in the destroy_at function.

But for vector specifically, and probably other containers as well, we know
specifically the type that we're destroying, so the library should use a scoped
destructor call (i.e. ptr->_Tp::~_Tp()) to force a non-virtual call.

So the vector situation seems to me like a library issue.

Reply via email to