The problem seems to be that clang produces _ZN7DerivedD1Ev = _ZN7DerivedD2Ev _ZN7DerivedD2Ev = _ZN4BaseD2Ev While gcc is less aggressive: .set _ZN7DerivedD1Ev,_ZN7DerivedD2Ev Should we disable the "derived destructor == base destructor" optimization at -O0? Cheers, Rafael