Why do we avoid pure virtual functions in compiler-rt?

Hi all,

I am just working on some code and noticed that we refrain from declaring any pure virtual functions in compiler-rt.
Our conceptually abstract classes are therefore not considered “abstract” in the C++ sense.
This turns some compile-time errors into run-time errors. Is there a reason we do this?

Example code:

class SymbolizerProcess {
[…]
virtual bool ReachedEndOfOutput(const char *buffer, uptr length) const {
UNIMPLEMENTED();
}
[…]
}

If I had to make a wild guess, it’s to avoid vtables referring to __cxa_pure_virtual. I don’t know why that would be problematic, but ASan already takes great care to avoid calling back into libc while its running.