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.

13 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