// -*- 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 <__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.
[[__noreturn__]] _LIBCPP_AVAILABILITY_VERBOSE_ABORT _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_ATTRIBUTE_FORMAT(
    __printf__, 1, 2) void __libcpp_verbose_abort(const char* __format, ...) _NOEXCEPT;

// _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)

#  if !_LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT
// The decltype is there to suppress -Wunused warnings in this configuration.
void __use(const char*, ...);
#    define _LIBCPP_VERBOSE_ABORT(...) (decltype(::std::__use(__VA_ARGS__))(), __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
