1//===-- ubsan_type_hash.cpp -----------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Implementation of a hash table for fast checking of inheritance
10// relationships. This file is only linked into C++ compilations, and is
11// permitted to use language features which require a C++ ABI library.
12//
13// Most of the implementation lives in an ABI-specific source file
14// (ubsan_type_hash_{itanium,win}.cpp).
15//
16//===----------------------------------------------------------------------===//
17
18#include "ubsan_platform.h"
19#if CAN_SANITIZE_UB
20#include "ubsan_type_hash.h"
21
22#include "sanitizer_common/sanitizer_common.h"
23
24/// A cache of recently-checked hashes. Mini hash table with "random" evictions.
25__ubsan::HashValue
26__ubsan::__ubsan_vptr_type_cache[__ubsan::VptrTypeCacheSize];
27
28__ubsan::DynamicTypeInfo __ubsan::getDynamicTypeInfoFromObject(void *Object) {
29 void *VtablePtr = *reinterpret_cast<void **>(Object);
30 return getDynamicTypeInfoFromVtable(Vtable: VtablePtr);
31}
32
33#endif // CAN_SANITIZE_UB
34

source code of compiler-rt/lib/ubsan/ubsan_type_hash.cpp