// -*- 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
//
//===----------------------------------------------------------------------===//

#ifndef _LIBCPP___VERBOSE_ABORT
#define _LIBCPP___VERBOSE_ABORT

#include <__availability>
#include <__config>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#  pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

// This function should never be called directly from the code -- it should only be called through
// the _LIBCPP_VERBOSE_ABORT macro.
_LIBCPP_NORETURN _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 1, 2)
void __libcpp_verbose_abort(const char *__format, ...);

// _LIBCPP_VERBOSE_ABORT(format, args...)
//
// This macro is used to abort the program abnormally while providing additional diagnostic information.
//
// The first argument is a printf-style format string, and the remaining arguments are values to format
// into the format-string. This macro can be customized by users to provide fine-grained control over
// how verbose termination is triggered.
//
// If the user does not supply their own version of the _LIBCPP_VERBOSE_ABORT macro, we pick the default
// behavior based on whether we know the built library we're running against provides support for the
// verbose termination handler or not. If it does, we call it. If it doesn't, we call __builtin_abort to
// make sure that the program terminates but without taking any complex dependencies in this header.
#if !defined(_LIBCPP_VERBOSE_ABORT)

// Support _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED until LLVM 18, but tell people
// to move to customizing _LIBCPP_VERBOSE_ABORT instead.
#  if defined(_LIBCPP_HAS_NO_VERBOSE_ABORT_IN_LIBRARY) && defined(_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED)
#    undef _LIBCPP_HAS_NO_VERBOSE_ABORT_IN_LIBRARY
#    warning _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED is deprecated, please customize _LIBCPP_VERBOSE_ABORT instead
#  endif

#  if defined(_LIBCPP_HAS_NO_VERBOSE_ABORT_IN_LIBRARY)
#    define _LIBCPP_VERBOSE_ABORT(...) __builtin_abort()
#  else
#    define _LIBCPP_VERBOSE_ABORT(...) ::std::__libcpp_verbose_abort(__VA_ARGS__)
#  endif
#endif // !defined(_LIBCPP_VERBOSE_ABORT)

_LIBCPP_END_NAMESPACE_STD

#endif // _LIBCPP___VERBOSE_ABORT
