xref: /aosp_15_r20/external/compiler-rt/lib/ubsan/ubsan_handlers_cxx.h (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot //===-- ubsan_handlers_cxx.h ------------------------------------*- C++ -*-===//
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot //                     The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot //
5*7c3d14c8STreehugger Robot // This file is distributed under the University of Illinois Open Source
6*7c3d14c8STreehugger Robot // License. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot //
8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
9*7c3d14c8STreehugger Robot //
10*7c3d14c8STreehugger Robot // Entry points to the runtime library for Clang's undefined behavior sanitizer,
11*7c3d14c8STreehugger Robot // for C++-specific checks. This code is not linked into C binaries.
12*7c3d14c8STreehugger Robot //
13*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
14*7c3d14c8STreehugger Robot #ifndef UBSAN_HANDLERS_CXX_H
15*7c3d14c8STreehugger Robot #define UBSAN_HANDLERS_CXX_H
16*7c3d14c8STreehugger Robot 
17*7c3d14c8STreehugger Robot #include "ubsan_value.h"
18*7c3d14c8STreehugger Robot 
19*7c3d14c8STreehugger Robot namespace __ubsan {
20*7c3d14c8STreehugger Robot 
21*7c3d14c8STreehugger Robot struct DynamicTypeCacheMissData {
22*7c3d14c8STreehugger Robot   SourceLocation Loc;
23*7c3d14c8STreehugger Robot   const TypeDescriptor &Type;
24*7c3d14c8STreehugger Robot   void *TypeInfo;
25*7c3d14c8STreehugger Robot   unsigned char TypeCheckKind;
26*7c3d14c8STreehugger Robot };
27*7c3d14c8STreehugger Robot 
28*7c3d14c8STreehugger Robot /// \brief Handle a runtime type check failure, caused by an incorrect vptr.
29*7c3d14c8STreehugger Robot /// When this handler is called, all we know is that the type was not in the
30*7c3d14c8STreehugger Robot /// cache; this does not necessarily imply the existence of a bug.
31*7c3d14c8STreehugger Robot extern "C" SANITIZER_INTERFACE_ATTRIBUTE
32*7c3d14c8STreehugger Robot void __ubsan_handle_dynamic_type_cache_miss(
33*7c3d14c8STreehugger Robot   DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
34*7c3d14c8STreehugger Robot extern "C" SANITIZER_INTERFACE_ATTRIBUTE
35*7c3d14c8STreehugger Robot void __ubsan_handle_dynamic_type_cache_miss_abort(
36*7c3d14c8STreehugger Robot   DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
37*7c3d14c8STreehugger Robot }
38*7c3d14c8STreehugger Robot 
39*7c3d14c8STreehugger Robot #endif // UBSAN_HANDLERS_H
40