Skip to content

Subject: Vtable and virtual dispatch changes

A change to a class's virtual-method set, order, or inheritance reshapes its vtable, VTT, or dispatch thunks -- silent misdispatch or a crash, not a link error.

15 case(s). ← back to all subjects

Cases

Case Title Verdict Category
case09_cpp_vtable C++ Vtable Change 🔴 BREAKING Breaking
case23_pure_virtual_added Virtual Method Became Pure Virtual 🔴 BREAKING Breaking
case38_virtual_methods Virtual Method Changes 🔴 BREAKING Breaking
case68_virtual_method_added Virtual Method Added to Non-Virtual Class 🔴 BREAKING Breaking
case72_covariant_return_changed Covariant Return Type Changed 🔴 BREAKING Breaking
case142_vtable_slot_count_binary_only Vtable Slot Count Changed (detected from a stripped binary) 🔴 BREAKING Breaking
case167_base_became_virtual Base Class Became Virtual (: public Device → : public virtual Device) 🔴 BREAKING Breaking
case168_virtual_method_devirtualized Virtual Method Devirtualized (flush() leaves the vtable) 🔴 BREAKING Breaking
case172_vtable_thunk_offset_changed Vtable Thunk Offset Changed (detected from a stripped binary) 🔴 BREAKING Breaking
case173_vtt_slot_count_changed VTT Slot Count Changed (detected from a stripped binary) 🔴 BREAKING Breaking
case174_secondary_vtable_group_changed Secondary Vtable Group Changed 🔴 BREAKING Breaking
case185_inherited_override_reuses_slot Inherited override reuses the base's vtable slot 🟢 COMPATIBLE Addition (Compatible)
case203_class_gained_vtable_pointer Class Gained a Vtable Pointer 🔴 BREAKING Breaking
case219_public_virtual_dispatch_set_changed Public Virtual Method's Override Set Changes 🟡 COMPATIBLE_WITH_RISK Risk
case220_public_virtual_dispatch_set_reordered Public Virtual Method's Override Set Reordered ✅ NO_CHANGE No Change