// -*- 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___ASSERT
#define _LIBCPP___ASSERT

#include <__availability>
#include <__config>

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

// This is for backwards compatibility with code that might have been enabling
// assertions through the Debug mode previously.
// TODO: In LLVM 16, make it an error to define _LIBCPP_DEBUG
#if defined(_LIBCPP_DEBUG)
# ifndef _LIBCPP_ENABLE_ASSERTIONS
#   define _LIBCPP_ENABLE_ASSERTIONS 1
# endif
#endif

// Automatically enable assertions when the debug mode is enabled.
#if defined(_LIBCPP_ENABLE_DEBUG_MODE)
# ifndef _LIBCPP_ENABLE_ASSERTIONS
#   define _LIBCPP_ENABLE_ASSERTIONS 1
# endif
#endif

#ifndef _LIBCPP_ENABLE_ASSERTIONS
# define _LIBCPP_ENABLE_ASSERTIONS _LIBCPP_ENABLE_ASSERTIONS_DEFAULT
#endif

#if _LIBCPP_ENABLE_ASSERTIONS != 0 && _LIBCPP_ENABLE_ASSERTIONS != 1
# error "_LIBCPP_ENABLE_ASSERTIONS must be set to 0 or 1"
#endif

#if _LIBCPP_ENABLE_ASSERTIONS
# define _LIBCPP_ASSERT(expression, message)                                        \
    (__builtin_expect(static_cast<bool>(expression), 1) ?                           \
      (void)0 :                                                                     \
      ::std::__libcpp_assertion_handler(__FILE__, __LINE__, #expression, message))
#elif !defined(_LIBCPP_ASSERTIONS_DISABLE_ASSUME) && __has_builtin(__builtin_assume)
# define _LIBCPP_ASSERT(expression, message)                                        \
    (_LIBCPP_DIAGNOSTIC_PUSH                                                        \
    _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wassume")                                    \
    __builtin_assume(static_cast<bool>(expression))                                 \
    _LIBCPP_DIAGNOSTIC_POP)
#else
# define _LIBCPP_ASSERT(expression, message) ((void)0)
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

_LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_AVAILABILITY_ASSERTION_HANDLER
void __libcpp_assertion_handler(char const* __file, int __line, char const* __expression, char const* __message);

_LIBCPP_END_NAMESPACE_STD

#endif // _LIBCPP___ASSERT
