//===-- ubsan_value.h -------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Representation of data which is passed from the compiler-generated calls into // the ubsan runtime. // //===----------------------------------------------------------------------===// #ifndef UBSAN_VALUE_H #define UBSAN_VALUE_H #include "sanitizer_common/sanitizer_atomic.h" #include "sanitizer_common/sanitizer_common.h" // FIXME: Move this out to a config header. #if __SIZEOF_INT128__ __extension__ s128; __extension__ u128; #define HAVE_INT128_T … #else #define HAVE_INT128_T … #endif namespace __ubsan { /// \brief Largest integer types we support. #if HAVE_INT128_T SIntMax; UIntMax; #else typedef s64 SIntMax; typedef u64 UIntMax; #endif /// \brief Largest floating-point type we support. FloatMax; /// \brief A description of a source location. This corresponds to Clang's /// \c PresumedLoc type. class SourceLocation { … }; /// \brief A description of a type. class TypeDescriptor { … }; /// \brief An opaque handle to a value. ValueHandle; /// Returns the class name of the given ObjC object, or null if the name /// cannot be found. const char *getObjCClassName(ValueHandle Pointer); /// \brief Representation of an operand value provided by the instrumented code. /// /// This is a combination of a TypeDescriptor (which is emitted as constant data /// as an operand to a handler function) and a ValueHandle (which is passed at /// runtime when a check failure occurs). class Value { … }; } // namespace __ubsan #endif // UBSAN_VALUE_H