[libcxx-commits] [libcxx] d269ec3 - [libc++] Add a escape hatch for making __libcpp_verbose_abort non-noexcept again (#113310)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Oct 23 14:07:19 PDT 2024


Author: Louis Dionne
Date: 2024-10-23T17:07:15-04:00
New Revision: d269ec321dfdfcd817544da0a94dc42c109694a2

URL: https://github.com/llvm/llvm-project/commit/d269ec321dfdfcd817544da0a94dc42c109694a2
DIFF: https://github.com/llvm/llvm-project/commit/d269ec321dfdfcd817544da0a94dc42c109694a2.diff

LOG: [libc++] Add a escape hatch for making __libcpp_verbose_abort non-noexcept again (#113310)

This allows a slightly smoother transition for people after #109151, as
requested on that PR.

Added: 
    

Modified: 
    libcxx/docs/ReleaseNotes/20.rst
    libcxx/include/__verbose_abort
    libcxx/src/verbose_abort.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/docs/ReleaseNotes/20.rst b/libcxx/docs/ReleaseNotes/20.rst
index 44912d2ddafac6..39546493ae8d6f 100644
--- a/libcxx/docs/ReleaseNotes/20.rst
+++ b/libcxx/docs/ReleaseNotes/20.rst
@@ -83,7 +83,9 @@ Deprecations and Removals
   ambiguity in name lookup. Code that expects such ambiguity will possibly not compile in LLVM 20.
 
 - The function ``__libcpp_verbose_abort()`` is now ``noexcept``, to match ``std::terminate()``. (The combination of
-  ``noexcept`` and ``[[noreturn]]`` has special significance for function effects analysis.)
+  ``noexcept`` and ``[[noreturn]]`` has special significance for function effects analysis.) For backwards compatibility,
+  the ``_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT`` macro can be defined to make the function non-``noexcept``. That macro
+  will be removed in LLVM 21.
 
 Upcoming Deprecations and Removals
 ----------------------------------
@@ -106,6 +108,9 @@ LLVM 21
   If you are using C++03 in your project, you should consider moving to a newer version of the Standard to get the most
   out of libc++.
 
+- The ``_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT`` macro will be removed in LLVM 21, making ``std::__libcpp_verbose_abort``
+  unconditionally ``noexcept``.
+
 
 ABI Affecting Changes
 ---------------------

diff  --git a/libcxx/include/__verbose_abort b/libcxx/include/__verbose_abort
index 73295cae426102..2d45cd0eb7f5d3 100644
--- a/libcxx/include/__verbose_abort
+++ b/libcxx/include/__verbose_abort
@@ -18,10 +18,16 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
+#if defined(_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT)
+#  define _LIBCPP_VERBOSE_ABORT_NOEXCEPT
+#else
+#  define _LIBCPP_VERBOSE_ABORT_NOEXCEPT _NOEXCEPT
+#endif
+
 // 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;
+[[__noreturn__]] _LIBCPP_AVAILABILITY_VERBOSE_ABORT _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_ATTRIBUTE_FORMAT(
+    __printf__, 1, 2) void __libcpp_verbose_abort(const char* __format, ...) _LIBCPP_VERBOSE_ABORT_NOEXCEPT;
 
 // _LIBCPP_VERBOSE_ABORT(format, args...)
 //

diff  --git a/libcxx/src/verbose_abort.cpp b/libcxx/src/verbose_abort.cpp
index 0019063405a810..6704709d247ca1 100644
--- a/libcxx/src/verbose_abort.cpp
+++ b/libcxx/src/verbose_abort.cpp
@@ -28,7 +28,7 @@ extern "C" void android_set_abort_message(const char* msg);
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-_LIBCPP_WEAK void __libcpp_verbose_abort(char const* format, ...) noexcept {
+_LIBCPP_WEAK void __libcpp_verbose_abort(char const* format, ...) _LIBCPP_VERBOSE_ABORT_NOEXCEPT {
   // Write message to stderr. We do this before formatting into a
   // buffer so that we still get some information out if that fails.
   {


        


More information about the libcxx-commits mailing list