| // -*- 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 <__config> | 
 | #include <__verbose_abort> | 
 |  | 
 | #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | 
 | #  pragma GCC system_header | 
 | #endif | 
 |  | 
 | // TODO: Remove in LLVM 17. | 
 | #if defined(_LIBCPP_DEBUG) | 
 | #   error "Defining _LIBCPP_DEBUG is not supported anymore. Please use _LIBCPP_ENABLE_DEBUG_MODE instead." | 
 | #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 :                                                                     \ | 
 |       _LIBCPP_VERBOSE_ABORT("%s:%d: assertion %s failed: %s", __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 | 
 |  | 
 | #endif // _LIBCPP___ASSERT |