mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 16:56:35 +00:00
[libc++][hardening] Deprecate _LIBCPP_ENABLE_ASSERTIONS
.
`_LIBCPP_ENABLE_ASSERTIONS` was used to enable the "safe" mode in libc++. Libc++ now provides the hardened mode and the debug mode that replace the safe mode. For backward compatibility, enabling `_LIBCPP_ENABLE_ASSERTIONS` now enables the hardened mode. Note that the hardened mode provides a narrower set of checks than the previous "safe" mode (only security-critical checks that are performant enough to be used in production). Differential Revision: https://reviews.llvm.org/D154997
This commit is contained in:
parent
2109587cee
commit
f0dfe682bc
@ -48,10 +48,6 @@ include(CMakeDependentOption)
|
||||
include(HandleCompilerRT)
|
||||
|
||||
# Basic options ---------------------------------------------------------------
|
||||
option(LIBCXX_ENABLE_ASSERTIONS
|
||||
"Enable assertions inside the compiled library, and at the same time make it the
|
||||
default when compiling user code. Note that assertions can be enabled or disabled
|
||||
by users in their own code regardless of this option." OFF)
|
||||
option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
|
||||
option(LIBCXX_ENABLE_STATIC "Build libc++ as a static library." ON)
|
||||
option(LIBCXX_ENABLE_FILESYSTEM
|
||||
@ -777,11 +773,6 @@ config_define_if_not(LIBCXX_ENABLE_LOCALIZATION _LIBCPP_HAS_NO_LOCALIZATION)
|
||||
config_define_if_not(LIBCXX_ENABLE_UNICODE _LIBCPP_HAS_NO_UNICODE)
|
||||
config_define_if_not(LIBCXX_ENABLE_WIDE_CHARACTERS _LIBCPP_HAS_NO_WIDE_CHARACTERS)
|
||||
config_define_if_not(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
|
||||
if (LIBCXX_ENABLE_ASSERTIONS)
|
||||
config_define(1 _LIBCPP_ENABLE_ASSERTIONS_DEFAULT)
|
||||
else()
|
||||
config_define(0 _LIBCPP_ENABLE_ASSERTIONS_DEFAULT)
|
||||
endif()
|
||||
if (LIBCXX_HARDENING_MODE STREQUAL "hardened")
|
||||
config_define(1 _LIBCPP_ENABLE_HARDENED_MODE_DEFAULT)
|
||||
config_define(0 _LIBCPP_ENABLE_DEBUG_MODE_DEFAULT)
|
||||
@ -792,6 +783,11 @@ elseif (LIBCXX_HARDENING_MODE STREQUAL "unchecked")
|
||||
config_define(0 _LIBCPP_ENABLE_HARDENED_MODE_DEFAULT)
|
||||
config_define(0 _LIBCPP_ENABLE_DEBUG_MODE_DEFAULT)
|
||||
endif()
|
||||
# TODO(LLVM 18): Remove this after branching for LLVM 17, this is a simple
|
||||
# courtesy for vendors to be notified about this change.
|
||||
if (LIBCXX_ENABLE_ASSERTIONS)
|
||||
message(FATAL_ERROR "LIBCXX_ENABLE_ASSERTIONS has been replaced by LIBCXX_HARDENING_MODE=hardened")
|
||||
endif()
|
||||
|
||||
if (LIBCXX_PSTL_CPU_BACKEND STREQUAL "serial")
|
||||
config_define(1 _LIBCPP_PSTL_CPU_BACKEND_SERIAL)
|
||||
|
@ -6,7 +6,6 @@ set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-G -Wl,-bcdtors:all:-2147483548:s" CACHE STRI
|
||||
set(CMAKE_AR "/usr/bin/ar" CACHE FILEPATH "")
|
||||
|
||||
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
|
||||
set(LIBCXX_ENABLE_ASSERTIONS OFF CACHE BOOL "")
|
||||
set(LIBCXX_ABI_VERSION "1" CACHE STRING "")
|
||||
set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "")
|
||||
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
|
||||
|
@ -2,7 +2,6 @@ set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE OFF CACHE BOOL "")
|
||||
|
||||
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
|
||||
set(LIBCXX_ENABLE_ASSERTIONS OFF CACHE BOOL "")
|
||||
set(LIBCXX_ABI_VERSION "1" CACHE STRING "")
|
||||
set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "")
|
||||
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
|
||||
|
@ -1,7 +1,6 @@
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "")
|
||||
|
||||
set(LIBCXX_ENABLE_ASSERTIONS OFF CACHE BOOL "")
|
||||
set(LIBCXX_ABI_VERSION "1" CACHE STRING "")
|
||||
set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "")
|
||||
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
|
||||
|
@ -1,2 +0,0 @@
|
||||
set(LIBCXX_ENABLE_ASSERTIONS ON CACHE BOOL "")
|
||||
set(LIBCXXABI_ENABLE_ASSERTIONS ON CACHE BOOL "")
|
@ -211,15 +211,6 @@ libc++ specific options
|
||||
|
||||
Toggle the installation of the libc++ headers.
|
||||
|
||||
.. option:: LIBCXX_ENABLE_ASSERTIONS:BOOL
|
||||
|
||||
**Default**: ``OFF``
|
||||
|
||||
Build libc++ with assertions enabled in the compiled library, and enable assertions
|
||||
by default when building user code as well. Assertions can be turned off by users
|
||||
by defining ``_LIBCPP_ENABLE_ASSERTIONS=0``. For details, see
|
||||
:ref:`the documentation <assertions-mode>`.
|
||||
|
||||
.. option:: LIBCXX_ENABLE_SHARED:BOOL
|
||||
|
||||
**Default**: ``ON``
|
||||
|
@ -20,21 +20,34 @@ contains all the checks from the hardened mode and additionally more expensive
|
||||
checks that may affect the complexity of algorithms. The debug mode is intended
|
||||
to be used for testing, not in production.
|
||||
|
||||
Vendors can set the default hardened mode by using the ``LIBCXX_HARDENING_MODE``
|
||||
CMake variable. Setting ``LIBCXX_HARDENING_MODE`` to ``hardened`` enables the
|
||||
hardened mode, and similarly setting the variable to ``debug`` enables the debug
|
||||
mode. The default value is ``unchecked`` which doesn't enable the hardened mode.
|
||||
Users can control whether the hardened mode or the debug mode is enabled
|
||||
on a per translation unit basis by setting the ``_LIBCPP_ENABLE_HARDENED_MODE``
|
||||
or ``_LIBCPP_ENABLE_DEBUG_MODE`` macro to ``1``.
|
||||
Vendors can set the default hardening mode by using the
|
||||
``LIBCXX_HARDENING_MODE`` variable at CMake configuration time. Setting
|
||||
``LIBCXX_HARDENING_MODE`` to ``hardened`` enables the hardened mode, and
|
||||
similarly setting the variable to ``debug`` enables the debug mode. The default
|
||||
value is ``unchecked`` which doesn't enable any hardening.
|
||||
|
||||
The hardened mode requires ``LIBCXX_ENABLE_ASSERTIONS`` to work. If
|
||||
``LIBCXX_ENABLE_ASSERTIONS`` was not set explicitly, enabling the hardened mode
|
||||
(or the debug mode) will implicitly enable ``LIBCXX_ENABLE_ASSERTIONS``. If
|
||||
``LIBCXX_ENABLE_ASSERTIONS`` was explicitly disabled, this will effectively
|
||||
disable the hardened mode.
|
||||
When hardening is enabled, the compiled library is built with the corresponding
|
||||
mode enabled, **and** user code will be built with the same mode enabled by
|
||||
default. If the mode is set to "unchecked" at the CMake configuration time, the
|
||||
compiled library will not contain any assertions and the default when building
|
||||
user code will be to have assertions disabled. As a user, you can consult your
|
||||
vendor to know which level of hardening is enabled by default.
|
||||
|
||||
Enabling the hardened mode (or the debug mode) has no impact on the ABI.
|
||||
Furthermore, independently of any vendor-selected default, users can always
|
||||
control which level of hardening is enabled in their code by defining
|
||||
``_LIBCPP_ENABLE_HARDENED_MODE=0|1`` (or ``_LIBCPP_ENABLE_DEBUG_MODE=0|1``)
|
||||
before including any libc++ header (we recommend passing
|
||||
``-D_LIBCPP_ENABLE_HARDENED_MODE=X`` or ``-D_LIBCPP_ENABLE_DEBUG_MODE=X`` to the
|
||||
compiler). Note that if the compiled library was built by the vendor in the
|
||||
unchecked mode, functions compiled inside the static or shared library won't
|
||||
have any hardening enabled even if the user compiles with hardening enabled (the
|
||||
same is true for the inverse case where the static or shared library was
|
||||
compiled **with** hardening enabled but the user tries to disable it). However,
|
||||
most of the code in libc++ is in the headers, so the user-selected value for
|
||||
``_LIBCPP_ENABLE_HARDENED_MODE`` or ``_LIBCPP_ENABLE_DEBUG_MODE`` (if any) will
|
||||
usually be respected.
|
||||
|
||||
Enabling hardening has no impact on the ABI.
|
||||
|
||||
Iterator bounds checking
|
||||
------------------------
|
||||
|
@ -88,6 +88,11 @@ Improvements and New Features
|
||||
Deprecations and Removals
|
||||
-------------------------
|
||||
|
||||
- The "safe" mode is replaced by the hardened mode in this release. The ``LIBCXX_ENABLE_ASSERTIONS`` CMake variable is
|
||||
deprecated and setting it will trigger an error; use ``LIBCXX_HARDENING_MODE`` instead. Similarly, the
|
||||
``_LIBCPP_ENABLE_ASSERTIONS`` macro is deprecated and setting it to ``1`` now enables the hardened mode. See
|
||||
``libcxx/docs/HardenedMode.rst`` for more details.
|
||||
|
||||
- The legacy debug mode has been removed in this release. Setting the macro ``_LIBCPP_ENABLE_DEBUG_MODE`` to ``1`` now
|
||||
enables the new debug mode which is part of hardening (see the "Improvements and New Features" section above). The
|
||||
``LIBCXX_ENABLE_DEBUG_MODE`` CMake variable has been removed. For additional context, refer to the `Discourse post
|
||||
|
@ -138,53 +138,32 @@ IWYU, you should run the tool like so:
|
||||
If you would prefer to not use that flag, then you can replace ``/path/to/include-what-you-use/share/libcxx.imp```
|
||||
file with the libc++-provided ``libcxx.imp`` file.
|
||||
|
||||
.. _assertions-mode:
|
||||
.. _termination-handler:
|
||||
|
||||
Enabling the "safe libc++" mode
|
||||
===============================
|
||||
Overriding the default termination handler
|
||||
==========================================
|
||||
|
||||
Libc++ contains a number of assertions whose goal is to catch undefined behavior in the
|
||||
library, usually caused by precondition violations. Those assertions do not aim to be
|
||||
exhaustive -- instead they aim to provide a good balance between safety and performance.
|
||||
In particular, these assertions do not change the complexity of algorithms. However, they
|
||||
might, in some cases, interfere with compiler optimizations.
|
||||
When the library wants to terminate due to an unforeseen condition (such as a hardening assertion
|
||||
failure), the program is aborted through a special verbose termination function. The library provides
|
||||
a default function that prints an error message and calls ``std::abort()``. Note that this function is
|
||||
provided by the static or shared library, so it is only available when deploying to a platform where
|
||||
the compiled library is sufficiently recent. On older platforms, the program will terminate in an
|
||||
unspecified unsuccessful manner, but the quality of diagnostics won't be great.
|
||||
|
||||
By default, these assertions are turned off. Vendors can decide to turn them on while building
|
||||
the compiled library by defining ``LIBCXX_ENABLE_ASSERTIONS=ON`` at CMake configuration time.
|
||||
When ``LIBCXX_ENABLE_ASSERTIONS`` is used, the compiled library will be built with assertions
|
||||
enabled, **and** user code will be built with assertions enabled by default. If
|
||||
``LIBCXX_ENABLE_ASSERTIONS=OFF`` at CMake configure time, the compiled library will not contain
|
||||
assertions and the default when building user code will be to have assertions disabled.
|
||||
As a user, you can consult your vendor to know whether assertions are enabled by default.
|
||||
|
||||
Furthermore, independently of any vendor-selected default, users can always control whether
|
||||
assertions are enabled in their code by defining ``_LIBCPP_ENABLE_ASSERTIONS=0|1`` before
|
||||
including any libc++ header (we recommend passing ``-D_LIBCPP_ENABLE_ASSERTIONS=X`` to the
|
||||
compiler). Note that if the compiled library was built by the vendor without assertions,
|
||||
functions compiled inside the static or shared library won't have assertions enabled even
|
||||
if the user defines ``_LIBCPP_ENABLE_ASSERTIONS=1`` (the same is true for the inverse case
|
||||
where the static or shared library was compiled **with** assertions but the user tries to
|
||||
disable them). However, most of the code in libc++ is in the headers, so the user-selected
|
||||
value for ``_LIBCPP_ENABLE_ASSERTIONS`` (if any) will usually be respected.
|
||||
|
||||
When an assertion fails, the program is aborted through a special verbose termination function. The
|
||||
library provides a default function that prints an error message and calls ``std::abort()``. Note
|
||||
that this function is provided by the static or shared library, so it is only available when deploying
|
||||
to a platform where the compiled library is sufficiently recent. On older platforms, the program will
|
||||
terminate in an unspecified unsuccessful manner, but the quality of diagnostics won't be great.
|
||||
However, users can also override that mechanism at two different levels. First, the mechanism can be
|
||||
overridden at compile-time by defining the ``_LIBCPP_VERBOSE_ABORT(format, args...)`` variadic macro.
|
||||
overridden at compile time by defining the ``_LIBCPP_VERBOSE_ABORT(format, args...)`` variadic macro.
|
||||
When that macro is defined, it will be called with a format string as the first argument, followed by
|
||||
a series of arguments to format using printf-style formatting. Compile-time customization may be
|
||||
interesting to get precise control over code generation, however it is also inconvenient to use in
|
||||
useful to get precise control over code generation, however it is also inconvenient to use in
|
||||
some cases. Indeed, compile-time customization of the verbose termination function requires that all
|
||||
translation units be compiled with a consistent definition for ``_LIBCPP_VERBOSE_ABORT`` to avoid ODR
|
||||
violations, which can add complexity in the build system of users.
|
||||
|
||||
Otherwise, if compile-time customization is not necessary, link-time customization of the handler is also
|
||||
possible, similarly to how replacing ``operator new`` works. This mechanism trades off fine-grained control
|
||||
over the call site where the termination is initiated in exchange for more ergonomics. Link-time customization
|
||||
is done by simply defining the following function in exactly one translation unit of your program:
|
||||
over the call site where the termination is initiated in exchange for better ergonomics. Link-time
|
||||
customization is done by simply defining the following function in exactly one translation unit of your
|
||||
program:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
@ -212,7 +191,7 @@ and ``operator delete``. For example:
|
||||
|
||||
int main() {
|
||||
std::vector<int> v;
|
||||
int& x = v[0]; // Your termination function will be called here if _LIBCPP_ENABLE_ASSERTIONS=1
|
||||
int& x = v[0]; // Your termination function will be called here if hardening is enabled.
|
||||
}
|
||||
|
||||
Also note that the verbose termination function should never return. Since assertions in libc++
|
||||
@ -227,14 +206,20 @@ Libc++ Configuration Macros
|
||||
===========================
|
||||
|
||||
Libc++ provides a number of configuration macros which can be used to enable
|
||||
or disable extended libc++ behavior, including enabling "debug mode" or
|
||||
thread safety annotations.
|
||||
or disable extended libc++ behavior, including enabling hardening or thread
|
||||
safety annotations.
|
||||
|
||||
**_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS**:
|
||||
This macro is used to enable -Wthread-safety annotations on libc++'s
|
||||
``std::mutex`` and ``std::lock_guard``. By default, these annotations are
|
||||
disabled and must be manually enabled by the user.
|
||||
|
||||
**_LIBCPP_ENABLE_HARDENED_MODE**:
|
||||
This macro is used to enable the :ref:`hardened mode <using-hardened-mode>`.
|
||||
|
||||
**_LIBCPP_ENABLE_DEBUG_MODE**:
|
||||
This macro is used to enable the :ref:`debug mode <using-hardened-mode>`.
|
||||
|
||||
**_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS**:
|
||||
This macro is used to disable all visibility annotations inside libc++.
|
||||
Defining this macro and then building libc++ with hidden visibility gives a
|
||||
|
@ -17,31 +17,21 @@
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#ifndef _LIBCPP_ENABLE_ASSERTIONS
|
||||
# define _LIBCPP_ENABLE_ASSERTIONS _LIBCPP_ENABLE_ASSERTIONS_DEFAULT
|
||||
#endif
|
||||
#define _LIBCPP_ASSERT(expression, message) \
|
||||
(__builtin_expect(static_cast<bool>(expression), 1) \
|
||||
? (void)0 \
|
||||
: _LIBCPP_VERBOSE_ABORT( \
|
||||
"%s:%d: assertion %s failed: %s\n", __builtin_FILE(), __builtin_LINE(), #expression, message))
|
||||
|
||||
#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\n", __builtin_FILE(), __builtin_LINE(), #expression, message))
|
||||
// TODO: __builtin_assume can currently inhibit optimizations. Until this has been fixed and we can add
|
||||
// assumptions without a clear optimization intent, disable that to avoid worsening the code generation.
|
||||
// See https://discourse.llvm.org/t/llvm-assume-blocks-optimization/71609 for a discussion.
|
||||
#elif 0 && __has_builtin(__builtin_assume)
|
||||
# define _LIBCPP_ASSERT(expression, message) \
|
||||
#if 0 && __has_builtin(__builtin_assume)
|
||||
# define _LIBCPP_ASSUME(expression) \
|
||||
(_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)
|
||||
# define _LIBCPP_ASSUME(expression) ((void)0)
|
||||
#endif
|
||||
|
||||
#define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message)
|
||||
|
||||
#endif // _LIBCPP___ASSERT
|
||||
|
@ -208,6 +208,19 @@
|
||||
|
||||
// HARDENING {
|
||||
|
||||
// TODO(hardening): remove this in LLVM 18.
|
||||
// This is for backward compatibility -- make enabling `_LIBCPP_ENABLE_ASSERTIONS` (which predates hardening modes)
|
||||
// equivalent to setting the hardened mode.
|
||||
# ifdef _LIBCPP_ENABLE_ASSERTIONS
|
||||
# warning "_LIBCPP_ENABLE_ASSERTIONS is deprecated, please use _LIBCPP_ENABLE_HARDENED_MODE instead."
|
||||
# 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_ENABLE_HARDENED_MODE 1
|
||||
# endif
|
||||
# endif
|
||||
|
||||
// Enables the hardened mode which consists of all checks intended to be used in production. Hardened mode prioritizes
|
||||
// security-critical checks that can be done with relatively little overhead in constant time. Mutually exclusive with
|
||||
// `_LIBCPP_ENABLE_DEBUG_MODE`.
|
||||
@ -245,26 +258,21 @@
|
||||
// Hardened mode checks.
|
||||
# if _LIBCPP_ENABLE_HARDENED_MODE
|
||||
|
||||
// Automatically enable assertions in hardened mode (unless the user explicitly turned them off).
|
||||
# ifndef _LIBCPP_ENABLE_ASSERTIONS
|
||||
# define _LIBCPP_ENABLE_ASSERTIONS 1
|
||||
# endif
|
||||
|
||||
// TODO(hardening): Once we categorize assertions, only enable the ones that we really want here.
|
||||
# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message)
|
||||
// TODO(hardening): more checks to be added here...
|
||||
|
||||
// Debug mode checks.
|
||||
# elif _LIBCPP_ENABLE_DEBUG_MODE
|
||||
|
||||
// Automatically enable assertions in debug mode (unless the user explicitly turned them off).
|
||||
# ifndef _LIBCPP_ENABLE_ASSERTIONS
|
||||
# define _LIBCPP_ENABLE_ASSERTIONS 1
|
||||
# endif
|
||||
|
||||
// TODO(hardening): Once we categorize assertions, only enable the ones that we really want here.
|
||||
# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message)
|
||||
// TODO(hardening): more checks to be added here...
|
||||
|
||||
// Disable all checks if neither the hardened mode nor the debug mode is enabled.
|
||||
# else
|
||||
|
||||
# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSUME(expression)
|
||||
// TODO: more checks to be added here...
|
||||
|
||||
# endif // _LIBCPP_ENABLE_HARDENED_MODE
|
||||
|
@ -28,7 +28,6 @@
|
||||
#cmakedefine _LIBCPP_HAS_NO_RANDOM_DEVICE
|
||||
#cmakedefine _LIBCPP_HAS_NO_LOCALIZATION
|
||||
#cmakedefine _LIBCPP_HAS_NO_WIDE_CHARACTERS
|
||||
#cmakedefine01 _LIBCPP_ENABLE_ASSERTIONS_DEFAULT
|
||||
|
||||
// PSTL backends
|
||||
#cmakedefine _LIBCPP_PSTL_CPU_BACKEND_SERIAL
|
||||
|
@ -24,10 +24,6 @@ if (NOT LIBCXX_ENABLE_RTTI)
|
||||
serialize_lit_param(enable_rtti False)
|
||||
endif()
|
||||
|
||||
if (LIBCXX_ENABLE_ASSERTIONS)
|
||||
serialize_lit_param(enable_assertions True)
|
||||
endif()
|
||||
|
||||
serialize_lit_param(hardening_mode "\"${LIBCXX_HARDENING_MODE}\"")
|
||||
|
||||
if (CMAKE_CXX_COMPILER_TARGET)
|
||||
|
@ -10,8 +10,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
|
@ -10,8 +10,9 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1 -D_LIBCPP_DEBUG_STRICT_WEAK_ORDERING_CHECK
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG_STRICT_WEAK_ORDERING_CHECK
|
||||
// When the debug mode is enabled, this test fails because we actually catch on the fly that the comparator is not
|
||||
// a strict-weak ordering before we catch that we'd dereference out-of-bounds inside std::sort, which leads to different
|
||||
// errors than the ones tested below.
|
||||
|
@ -1,24 +0,0 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Test that _LIBCPP_ASSERT doesn't do anything when assertions are disabled.
|
||||
// We need to use -Wno-macro-redefined because the test suite defines
|
||||
// _LIBCPP_ENABLE_ASSERTIONS=1 under some configurations.
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-macro-redefined -D_LIBCPP_ENABLE_ASSERTIONS=0
|
||||
|
||||
#include <cassert>
|
||||
|
||||
bool executed_condition = false;
|
||||
bool f() { executed_condition = true; return false; }
|
||||
|
||||
int main(int, char**) {
|
||||
_LIBCPP_ASSERT(f(), "message"); // should not execute anything
|
||||
assert(!executed_condition); // really make sure we did not execute anything at all
|
||||
return 0;
|
||||
}
|
@ -13,7 +13,7 @@
|
||||
// defining _LIBCPP_VERBOSE_ABORT ourselves. Note that this does not have any
|
||||
// deployment target requirements.
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1 -D_LIBCPP_VERBOSE_ABORT(...)=my_abort(__VA_ARGS__)
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_VERBOSE_ABORT(...)=my_abort(__VA_ARGS__)
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
|
@ -8,8 +8,6 @@
|
||||
|
||||
// Test that we can set a custom verbose termination function at link-time.
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// We flag uses of the verbose termination function in older dylibs at compile-time to avoid runtime
|
||||
// failures when back-deploying.
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
|
@ -8,8 +8,6 @@
|
||||
|
||||
// Test that the default verbose termination function aborts the program.
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <csignal>
|
||||
#include <cstdlib>
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// Make sure that we still support _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED for folks
|
||||
// who customize the verbose termination function at link-time in back-deployment environments.
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1 -D_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED
|
||||
|
||||
// We emit a #warning about the deprecation of this setting, so make sure we don't turn that into an error.
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-error
|
||||
|
@ -8,9 +8,7 @@
|
||||
|
||||
// This test ensures that we can disable the debug mode on a per-TU basis regardless of how the library was built.
|
||||
|
||||
// TODO(hardening): currently, explicitly enabling assertions enables all uncategorized assertions and overrides
|
||||
// disabling the debug mode.
|
||||
// UNSUPPORTED: libcpp-has-hardened-mode, libcpp-has-assertions
|
||||
// UNSUPPORTED: libcpp-has-hardened-mode
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-macro-redefined -D_LIBCPP_ENABLE_DEBUG_MODE=0
|
||||
|
||||
#include <cassert>
|
||||
|
@ -10,10 +10,8 @@
|
||||
|
||||
// Hardened mode would additionally trigger the error that hardened and debug modes are mutually exclusive.
|
||||
// UNSUPPORTED: libcpp-has-hardened-mode
|
||||
// `check_assertion.h` is only available starting from C++11.
|
||||
// UNSUPPORTED: c++03
|
||||
// `check_assertion.h` requires Unix headers.
|
||||
// REQUIRES: has-unix-headers
|
||||
// `check_assertion.h` is only available starting from C++11 and requires Unix headers.
|
||||
// UNSUPPORTED: c++03, !has-unix-headers
|
||||
// The ability to set a custom abort message is required to compare the assertion message.
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-macro-redefined -D_LIBCPP_ENABLE_DEBUG_MODE=1
|
||||
|
@ -1,21 +0,0 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Test that we can override whether assertions are enabled regardless of the hardening mode in use.
|
||||
|
||||
// UNSUPPORTED: !libcpp-has-debug-mode
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-macro-redefined -D_LIBCPP_ENABLE_ASSERTIONS=0
|
||||
|
||||
#include <cassert>
|
||||
|
||||
int main(int, char**) {
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(true, "Should not fire");
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(false, "Also should not fire");
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// TODO(hardening): remove in LLVM 18.
|
||||
// This test ensures that enabling assertions now enables the hardened mode.
|
||||
|
||||
// `check_assertion.h` is only available starting from C++11 and requires Unix headers.
|
||||
// UNSUPPORTED: c++03, !has-unix-headers
|
||||
// The ability to set a custom abort message is required to compare the assertion message.
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// Debug mode is mutually exclusive with hardened mode.
|
||||
// UNSUPPORTED: libcpp-has-debug-mode
|
||||
// Ignore the warning about `_LIBCPP_ENABLE_ASSERTIONS` being deprecated.
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-error -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <cassert>
|
||||
#include "check_assertion.h"
|
||||
|
||||
int main(int, char**) {
|
||||
static_assert(_LIBCPP_ENABLE_HARDENED_MODE == 1, "Hardened mode should be implicitly enabled");
|
||||
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(true, "Should not fire");
|
||||
TEST_LIBCPP_ASSERT_FAILURE([] {
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(false, "Should fire");
|
||||
}(), "Should fire");
|
||||
|
||||
return 0;
|
||||
}
|
@ -14,6 +14,7 @@
|
||||
// UNSUPPORTED: c++03
|
||||
// `check_assertion.h` requires Unix headers.
|
||||
// REQUIRES: has-unix-headers
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
|
||||
#include <cassert>
|
||||
#include "check_assertion.h"
|
||||
|
@ -8,9 +8,7 @@
|
||||
|
||||
// This test ensures that we can disable the hardened mode on a per-TU basis regardless of how the library was built.
|
||||
|
||||
// TODO(hardening): currently, explicitly enabling assertions enables all uncategorized assertions and overrides
|
||||
// disabling the hardened mode.
|
||||
// UNSUPPORTED: libcpp-has-debug-mode, libcpp-has-assertions
|
||||
// UNSUPPORTED: libcpp-has-debug-mode
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-macro-redefined -D_LIBCPP_ENABLE_HARDENED_MODE=0
|
||||
|
||||
#include <cassert>
|
||||
|
@ -1,21 +0,0 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Test that we can override whether assertions are enabled regardless of the hardening mode in use.
|
||||
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-macro-redefined -D_LIBCPP_ENABLE_ASSERTIONS=0
|
||||
|
||||
#include <cassert>
|
||||
|
||||
int main(int, char**) {
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(true, "Should not fire");
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(false, "Also should not fire");
|
||||
|
||||
return 0;
|
||||
}
|
@ -13,12 +13,14 @@
|
||||
|
||||
#include <cassert>
|
||||
|
||||
bool executed_condition = false;
|
||||
bool f() { executed_condition = true; return false; }
|
||||
|
||||
int main(int, char**) {
|
||||
// TODO(hardening): remove the `#if` guard once `_LIBCPP_ENABLE_ASSERTIONS` no longer affects hardening modes.
|
||||
#if !_LIBCPP_ENABLE_ASSERTIONS
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(true, "Should not fire");
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(false, "Also should not fire");
|
||||
#endif
|
||||
_LIBCPP_ASSERT_UNCATEGORIZED(f(), "Should not execute anything");
|
||||
assert(!executed_condition); // Really make sure we did not execute anything.
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -6,17 +6,9 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Make sure that _LIBCPP_ASSERT is a single expression. This is useful so we can use
|
||||
// it in places that require an expression, such as in a constructor initializer list.
|
||||
|
||||
// RUN: %{build} -Wno-macro-redefined -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
// RUN: %{run}
|
||||
|
||||
// RUN: %{build} -Wno-macro-redefined -D_LIBCPP_ENABLE_ASSERTIONS=0
|
||||
// RUN: %{run}
|
||||
|
||||
// RUN: %{build} -Wno-macro-redefined -D_LIBCPP_ENABLE_ASSERTIONS=0 -D_LIBCPP_ASSERTIONS_DISABLE_ASSUME
|
||||
// RUN: %{run}
|
||||
// Make sure that `_LIBCPP_ASSERT` and `_LIBCPP_ASSUME` are each a single expression.
|
||||
// This is useful so we can use them in places that require an expression, such as
|
||||
// in a constructor initializer list.
|
||||
|
||||
#include <__assert>
|
||||
#include <cassert>
|
||||
@ -27,7 +19,14 @@ void f() {
|
||||
return _LIBCPP_ASSERT(true, "message");
|
||||
}
|
||||
|
||||
void g() {
|
||||
int i = (_LIBCPP_ASSUME(true), 3);
|
||||
assert(i == 3);
|
||||
return _LIBCPP_ASSUME(true);
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
f();
|
||||
g();
|
||||
return 0;
|
||||
}
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// test that array<T, 0>::back() triggers an assertion
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// test that array<T, 0>::back() triggers an assertion
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// test that array<T, 0>::operator[] triggers an assertion
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <deque>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <list>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <list>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
@ -17,8 +17,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
@ -17,8 +17,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
|
@ -17,8 +17,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
|
@ -17,8 +17,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
|
@ -19,8 +19,8 @@
|
||||
// Check that we ensure that `[it, sent)` is a valid range.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -16,8 +16,8 @@
|
||||
// dynamic_extent version.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Check that we ensure `other.size() == Extent`.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Check that we ensure `size(r) == Extent`.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <span>
|
||||
#include <vector>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Make sure that accessing a span out-of-bounds triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Make sure that accessing a span out-of-bounds triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Make sure that accessing a span out-of-bounds triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Make sure that creating a sub-span with an incorrect number of elements triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -14,8 +14,8 @@
|
||||
// Make sure that creating a sub-span with an incorrect number of elements triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -22,8 +22,8 @@
|
||||
// Make sure that creating a sub-span with an incorrect number of elements triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <array>
|
||||
#include <span>
|
||||
|
@ -1,17 +0,0 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// This test ensures that assertions are enabled by default when the debug mode is enabled.
|
||||
|
||||
// REQUIRES: libcpp-has-legacy-debug-mode
|
||||
|
||||
#include <version>
|
||||
|
||||
#if !defined(_LIBCPP_ENABLE_ASSERTIONS) || _LIBCPP_ENABLE_ASSERTIONS == 0
|
||||
# error "Assertions should be enabled automatically when the debug mode is enabled"
|
||||
#endif
|
@ -14,9 +14,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||
|
||||
#include <experimental/memory_resource>
|
||||
|
@ -14,9 +14,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||
|
||||
#include <experimental/memory_resource>
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <filesystem>
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <list>
|
||||
|
||||
|
@ -7,9 +7,8 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: c++03, !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <list>
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <list>
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <iterator>
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
// UNSUPPORTED: no-exceptions
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <ranges>
|
||||
|
||||
|
@ -7,8 +7,9 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, !libcpp-has-legacy-debug-mode
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
|
||||
// <ranges>
|
||||
|
||||
|
@ -7,8 +7,9 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, !libcpp-has-legacy-debug-mode
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
|
||||
// <ranges>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -9,8 +9,8 @@
|
||||
// REQUIRES: has-unix-headers
|
||||
|
||||
// UNSUPPORTED: c++03, c++11
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// Construct a string_view from an invalid length
|
||||
// constexpr basic_string_view( const _CharT* s, size_type len )
|
||||
|
@ -7,11 +7,9 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++11, c++14
|
||||
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: c++03, c++11, c++14
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// Construct a string_view from a null pointer
|
||||
// constexpr basic_string_view( const CharT* s );
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, no-threads
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <future>
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, no-threads
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <future>
|
||||
|
||||
|
@ -17,8 +17,8 @@
|
||||
// Make sure that calling arrive_and_wait with a negative value triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <latch>
|
||||
|
||||
|
@ -18,8 +18,8 @@
|
||||
// higher than the internal counter triggers an assertion.
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <latch>
|
||||
|
||||
|
@ -17,8 +17,8 @@
|
||||
// Make sure that calling latch with a negative value triggers an assertion
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <latch>
|
||||
|
||||
|
@ -6,12 +6,11 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -fno-exceptions -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -fno-exceptions
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-private-header
|
||||
|
||||
#include <__utility/exception_guard.h>
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// constexpr const T* operator->() const noexcept;
|
||||
// constexpr T* operator->() noexcept;
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// constexpr const T& operator*() const & noexcept;
|
||||
// constexpr T& operator*() & noexcept;
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// constexpr const E& error() const & noexcept;
|
||||
// constexpr E& error() & noexcept;
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// constexpr void operator*() const noexcept;
|
||||
//
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// constexpr const E& error() const & noexcept;
|
||||
// constexpr E& error() & noexcept;
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <optional>
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
#include <optional>
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <algorithm>
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// UNSUPPORTED: c++03
|
||||
// UNSUPPORTED: !libcpp-has-hardened-mode && !libcpp-has-debug-mode
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||
|
||||
// <algorithm>
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user