};
#define RECOVERABLE(checkname, ...) \
- SANITIZER_INTERFACE_ATTRIBUTE \
- extern "C" void __ubsan_handle_ ## checkname( __VA_ARGS__ ); \
- SANITIZER_INTERFACE_ATTRIBUTE \
- extern "C" void __ubsan_handle_ ## checkname ## _abort( __VA_ARGS__ );
+ extern "C" SANITIZER_INTERFACE_ATTRIBUTE \
+ void __ubsan_handle_ ## checkname( __VA_ARGS__ ); \
+ extern "C" SANITIZER_INTERFACE_ATTRIBUTE \
+ void __ubsan_handle_ ## checkname ## _abort( __VA_ARGS__ );
/// \brief Handle a runtime type check failure, caused by either a misaligned
/// pointer, a null pointer, or a pointer to insufficient storage for the
};
/// \brief Handle a __builtin_unreachable which is reached.
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" void __ubsan_handle_builtin_unreachable(UnreachableData *Data);
+extern "C" SANITIZER_INTERFACE_ATTRIBUTE
+void __ubsan_handle_builtin_unreachable(UnreachableData *Data);
/// \brief Handle reaching the end of a value-returning function.
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" void __ubsan_handle_missing_return(UnreachableData *Data);
+extern "C" SANITIZER_INTERFACE_ATTRIBUTE
+void __ubsan_handle_missing_return(UnreachableData *Data);
struct VLABoundData {
SourceLocation Loc;
/// \brief Handle a runtime type check failure, caused by an incorrect vptr.
/// When this handler is called, all we know is that the type was not in the
/// cache; this does not necessarily imply the existence of a bug.
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" void __ubsan_handle_dynamic_type_cache_miss(
+extern "C" SANITIZER_INTERFACE_ATTRIBUTE
+void __ubsan_handle_dynamic_type_cache_miss(
DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" void __ubsan_handle_dynamic_type_cache_miss_abort(
+extern "C" SANITIZER_INTERFACE_ATTRIBUTE
+void __ubsan_handle_dynamic_type_cache_miss_abort(
DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash);
}