This module defines a class hierarchy analysis for C++.
This analysis operates entirely at the bitcode level and does not rely on metadata.
The hierarchy analysis result only includes class instantiations in the bitcode provided (i.e., it is most useful for whole-program bitcodes). Results for single compilation units will be incomplete.
Also note that this analysis requires the input bitcode to be built with C++ run-time type information.
- data CHA
- data VTable
- resolveVirtualCallee :: CHA -> Instruction -> Maybe [Function]
- classSubtypes :: CHA -> Type -> [Type]
- classTransitiveSubtypes :: CHA -> Type -> [Type]
- classParents :: CHA -> Type -> [Type]
- classAncestors :: CHA -> Type -> [Type]
- classVTable :: CHA -> Type -> Maybe VTable
- functionAtSlot :: Int -> VTable -> Maybe Function
- runCHA :: Module -> CHA
- classHierarchyToTestFormat :: CHA -> Map String (Set String)
List of all types *transitively* drived from the given
List of the immediate parent types of the given
Type. The list
is only empty for the root of a class hierarchy.
List of all (transitive) parent types of the given
Retrieve the vtbl for a given type. Will return Nothing if the type is not a class or if the class has no virtual methods.
Get the function at the named slot in a vtable. Returns Nothing for external vtables.
The analysis reconstructs the class hierarchy by looking at typeinfo structures (which are probably only generated when compiling with run-time type information enabled). It also finds vtables by demangling the names of the vtables in the module.