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

--- Comment #24 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Or do you consider this just harmless?  If some ctor throws, even if dtor is
virtual, the dtor will change _vptr to what it expects before the rest of the
dtor body which could call virtual functions etc., and if you reach the body or
mem initializers of the ctor (B:B above), then the old vptr store is already
overwritten by another vptr store (or the vptr is living somewhere outside of
the current object, but then the clobber is not a problem).
If so, we'd need to at least disable the clobbers for -fsanitize=vptr, because
when calling the dtor ubsan also checks if the vptr is valid, and if it is NULL
or garbage, it is not considered valid.

Reply via email to