[libcxx-commits] [PATCH] D109459: [libc++][ABI BREAK] Do not use the C++03 emulation for std::nullptr_t by default
Louis Dionne via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Nov 30 03:00:29 PST 2021
ldionne updated this revision to Diff 390647.
ldionne marked an inline comment as done.
ldionne added a comment.
Address wording issues in the release note. Thanks Arthur!
I'm going to ship this now since I think this is pretty uncontroversial.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D109459/new/
https://reviews.llvm.org/D109459
Files:
libcxx/docs/ReleaseNotes.rst
libcxx/include/__config
Index: libcxx/include/__config
===================================================================
--- libcxx/include/__config
+++ libcxx/include/__config
@@ -74,10 +74,6 @@
# define _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB
# define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB
# define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
-// Don't use a nullptr_t simulation type in C++03 instead using C++11 nullptr
-// provided under the alternate keyword __nullptr, which changes the mangling
-// of nullptr_t. This option is ABI incompatible with GCC in C++03 mode.
-# define _LIBCPP_ABI_ALWAYS_USE_CXX11_NULLPTR
// Define a key function for `bad_function_call` in the library, to centralize
// its vtable and typeinfo to libc++ rather than having all other libraries
// using that class define their own copies.
@@ -127,6 +123,23 @@
# endif
#endif
+// By default, don't use a nullptr_t emulation type in C++03.
+//
+// This is technically an ABI break from previous releases, however it is
+// very unlikely to impact anyone. If a user is impacted by this break,
+// they can return to using the C++03 nullptr emulation by defining
+// _LIBCPP_ABI_USE_CXX03_NULLPTR_EMULATION.
+//
+// This switch will be removed entirely in favour of never providing a
+// C++03 emulation after one release.
+//
+// IMPORTANT: IF YOU ARE READING THIS AND YOU TURN THIS MACRO ON, PLEASE LEAVE
+// A COMMENT ON https://reviews.llvm.org/D109459 OR YOU WILL BE BROKEN
+// IN THE FUTURE WHEN WE REMOVE THE ABILITY TO USE THE C++03 EMULATION.
+#ifndef _LIBCPP_ABI_USE_CXX03_NULLPTR_EMULATION
+# define _LIBCPP_ABI_ALWAYS_USE_CXX11_NULLPTR
+#endif
+
#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCPP_ABI_UNSTABLE) || _LIBCPP_ABI_VERSION >= 2
// Enable additional explicit instantiations of iostreams components. This
// reduces the number of weak definitions generated in programs that use
Index: libcxx/docs/ReleaseNotes.rst
===================================================================
--- libcxx/docs/ReleaseNotes.rst
+++ libcxx/docs/ReleaseNotes.rst
@@ -99,6 +99,17 @@
- The C++17 variable templates ``is_error_code_enum_v`` and
``is_error_condition_enum_v`` are now of type ``bool`` instead of ``size_t``.
+- The C++03 emulation type for ``std::nullptr_t`` has been removed in favor of
+ using ``decltype(nullptr)`` in all standard modes. This is an ABI break for
+ anyone compiling in C++03 mode and who has ``std::nullptr_t`` as part of their
+ ABI. However, previously, these users' ABI would be incompatible with any other
+ binary or static archive compiled with C++11 or later. If you start seeing linker
+ errors involving ``std::nullptr_t`` against previously compiled binaries, this may
+ be the cause. You can define the ``_LIBCPP_ABI_USE_CXX03_NULLPTR_EMULATION`` macro
+ to return to the previous behavior. That macro will be removed in LLVM 15. Please
+ comment `here <https://reviews.llvm.org/D109459>`_ if you are broken by this change
+ and need to define the macro.
+
Build System Changes
--------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109459.390647.patch
Type: text/x-patch
Size: 3085 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20211130/ee90b691/attachment-0001.bin>
More information about the libcxx-commits
mailing list