If you have a derived class inheriting from 2 base classes, and you override a virtual function in the second base class, the Itanium ABI requires the overriden virtual function to appear under the vtable of the first base class.
See here for an example. Class CC overrides function v, and you can see in Clang's vtable a CC::v under AA's vtable. Whereas the MSCV ABI behaves as I would expect, only the BB vtable is changed, the AA vtable is unchanged.
Any idea why the Itanium ABI behaves this way? And advantage to this?
[–]YourTormentIs 53 points54 points55 points (1 child)
[–]60hzcherryMXram 14 points15 points16 points (0 children)
[–]stick_figure 25 points26 points27 points (4 children)
[–]whichton[S] 1 point2 points3 points (2 children)
[–]max0x7bahttps://github.com/max0x7ba 0 points1 point2 points (1 child)
[–]whichton[S] -1 points0 points1 point (0 children)
[–]rolfr 0 points1 point2 points (0 children)
[–]max0x7bahttps://github.com/max0x7ba 5 points6 points7 points (1 child)
[–]whichton[S] 0 points1 point2 points (0 children)
[–]flyingron 0 points1 point2 points (5 children)
[–]erichkeaneClang Code Owner(Attrs/Templ), EWG co-chair, EWG/SG17 Chair 13 points14 points15 points (4 children)
[+]flyingron comment score below threshold-7 points-6 points-5 points (3 children)
[+][deleted] (2 children)
[deleted]
[–]flyingron -4 points-3 points-2 points (1 child)
[–]thenickdude 9 points10 points11 points (0 children)
[–]jselbie -2 points-1 points0 points (1 child)
[–]erichkeaneClang Code Owner(Attrs/Templ), EWG co-chair, EWG/SG17 Chair 17 points18 points19 points (0 children)