blob: d2713a9bfe4bf0921eec45dc04fa702f36b62063 [file] [log] [blame]
Hans Wennborg003a9982019-07-18 11:51:05 +00001=========================================
Tom Stellardce41e662021-07-27 21:51:07 -07002Libc++ 14.0.0 (In-Progress) Release Notes
Hans Wennborg003a9982019-07-18 11:51:05 +00003=========================================
Louis Dionne42222072018-09-06 14:46:22 +00004
5.. contents::
6 :local:
7 :depth: 2
8
Hans Wennborg3329a842018-09-10 08:57:12 +00009Written by the `Libc++ Team <https://libcxx.llvm.org>`_
Louis Dionne42222072018-09-06 14:46:22 +000010
11.. warning::
12
Tom Stellardce41e662021-07-27 21:51:07 -070013 These are in-progress notes for the upcoming libc++ 14 release.
Louis Dionne42222072018-09-06 14:46:22 +000014 Release notes for previous releases can be found on
Hans Wennborg3329a842018-09-10 08:57:12 +000015 `the Download Page <https://releases.llvm.org/download.html>`_.
Louis Dionne42222072018-09-06 14:46:22 +000016
17Introduction
18============
19
20This document contains the release notes for the libc++ C++ Standard Library,
Tom Stellardce41e662021-07-27 21:51:07 -070021part of the LLVM Compiler Infrastructure, release 14.0.0. Here we describe the
Louis Dionne42222072018-09-06 14:46:22 +000022status of libc++ in some detail, including major improvements from the previous
23release and new feature work. For the general LLVM release notes, see `the LLVM
Hans Wennborg3329a842018-09-10 08:57:12 +000024documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
25be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_.
Louis Dionne42222072018-09-06 14:46:22 +000026
27For more information about libc++, please see the `Libc++ Web Site
Hans Wennborg3329a842018-09-10 08:57:12 +000028<https://libcxx.llvm.org>`_ or the `LLVM Web Site <https://llvm.org>`_.
Louis Dionne42222072018-09-06 14:46:22 +000029
Hans Wennborgfc14f4e2020-01-15 10:02:56 +010030Note that if you are reading this file from a Git checkout or the
Louis Dionne42222072018-09-06 14:46:22 +000031main Libc++ web page, this document applies to the *next* release, not
32the current one. To see the release notes for a specific release, please
Hans Wennborg3329a842018-09-10 08:57:12 +000033see the `releases page <https://llvm.org/releases/>`_.
Louis Dionne42222072018-09-06 14:46:22 +000034
Tom Stellardce41e662021-07-27 21:51:07 -070035What's New in Libc++ 14.0.0?
Hans Wennborg003a9982019-07-18 11:51:05 +000036============================
Louis Dionne42222072018-09-06 14:46:22 +000037
38New Features
39------------
40
Mark de Wevercb50a052020-12-19 13:52:07 +010041- There's initial support for the C++20 header ``<format>``. The implementation
42 is incomplete. Some functions are known to be inefficient; both in memory
43 usage and performance. The implementation is considered experimental and isn't
44 considered ABI stable.
Louis Dionne14918c82021-10-18 13:58:31 -040045
Mark de Weverebbd3b62021-05-25 20:11:08 +020046- There's a new CMake option ``LIBCXX_ENABLE_UNICODE`` to disable Unicode
47 support in the ``<format>`` header. This only affects the estimation of the
48 output width of the format functions.
Raul Tambreafcedea2020-06-19 12:43:33 +053049
Louis Dionne89258142021-08-23 15:32:36 -040050- Support for building libc++ on top of a C Standard Library that does not support ``wchar_t`` was
51 added. This is useful for building libc++ in an embedded setting, and it adds itself to the various
52 freestanding-friendly options provided by libc++.
Sylvestre Ledrub6e1b312021-10-04 11:06:45 +020053
Louis Dionne14918c82021-10-18 13:58:31 -040054API Changes
55-----------
Mark de Wever494905b2021-06-09 20:26:34 +020056
57- The functions ``std::atomic<T*>::fetch_(add|sub)`` and
58 ``std::atomic_fetch_(add|sub)`` no longer accept a function pointer. While
59 this is technically an API break, the invalid syntax isn't supported by
60 libstc++ and MSVC STL. See https://godbolt.org/z/49fvzz98d.
61
62- The call of the functions ``std::atomic_(add|sub)(std::atomic<T*>*, ...)``
63 with the explicit template argument ``T`` are now ill-formed. While this is
64 technically an API break, the invalid syntax isn't supported by libstc++ and
65 MSVC STL. See https://godbolt.org/z/v9959re3v.
66
67 Due to this change it's now possible to call these functions with the
68 explicit template argument ``T*``. This allows using the same syntax on the
69 major Standard library implementations.
70 See https://godbolt.org/z/oEfzPhTTb.
71
72 Calls to these functions where the template argument was deduced by the
73 compiler are unaffected by this change.
Louis Dionne076fd0c2021-10-07 16:19:11 -040074
Mikhail Maltsevd93a8772021-10-18 19:12:42 +010075- The functions ``std::allocator<T>::allocate`` and
76 ``std::experimental::pmr::polymorphic_allocator<T>::allocate`` now throw
77 an exception of type ``std::bad_array_new_length`` when the requested size
78 exceeds the maximum supported size, as required by the C++ standard.
79 Previously the type ``std::length_error`` was used.
80
Joe Loser8fcb1d92021-10-28 15:38:02 -040081ABI Changes
82-----------
83
84- The C++17 variable templates ``is_error_code_enum_v`` and
85 ``is_error_condition_enum_v`` are now of type ``bool`` instead of ``size_t``.
86
Louis Dionne14918c82021-10-18 13:58:31 -040087Build System Changes
88--------------------
89
90- Building the libc++ shared or static library requires a C++ 20 capable compiler.
91 Consider using a Bootstrapping build to build libc++ with a fresh Clang if you
92 can't use the system compiler to build libc++ anymore.
93
Louis Dionne076fd0c2021-10-07 16:19:11 -040094- Historically, there has been numerous ways of building libc++ and libc++abi. This has
95 culminated in over 5 different ways to build the runtimes, which made it impossible to
96 maintain with a good level of support. Starting with this release, the runtimes support
97 exactly two ways of being built, which should cater to all use-cases. Furthermore,
98 these builds are as lightweight as possible and will work consistently even when targetting
99 embedded platforms, which used not to be the case. Please see the documentation on building
100 libc++ to see those two ways of building and migrate over to the appropriate build instructions
101 as soon as possible.
102
103 All other ways to build are deprecated and will not be supported in the next release.
104 We understand that making these changes can be daunting. For that reason, here's a
105 summary of how to migrate from the two most common ways to build:
106
107 - If you were rooting your CMake invocation at ``<monorepo>/llvm`` and passing ``-DLLVM_ENABLE_PROJECTS=<...>``
108 (which was the previously advertised way to build the runtimes), please simply root your CMake invocation at
109 ``<monorepo>/runtimes`` and pass ``-DLLVM_ENABLE_RUNTIMES=<...>``.
110
111 - If you were doing two CMake invocations, one rooted at ``<monorepo>/libcxx`` and one rooted at
112 ``<monorepo>/libcxxabi`` (this used to be called a "Standalone build"), please move them to a
113 single invocation like so:
114
115 .. code-block:: bash
116
117 $ cmake -S <monorepo>/libcxx -B libcxx-build <LIBCXX-OPTIONS>
118 $ cmake -S <monorepo>/libcxxabi -B libcxxabi-build <LIBCXXABI-OPTIONS>
119
120 should become
121
122 .. code-block:: bash
123
124 $ cmake -S <monorepo>/runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" <LIBCXX-OPTIONS> <LIBCXXABI-OPTIONS>