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.