[libc++] Re-add transitive includes that had been removed since LLVM 14
authorLouis Dionne <ldionne.2@gmail.com>
Mon, 27 Jun 2022 19:53:41 +0000 (15:53 -0400)
committerLouis Dionne <ldionne.2@gmail.com>
Tue, 28 Jun 2022 02:18:19 +0000 (22:18 -0400)
commitde4a57cb21a19179d7be830967e642b868a05a91
tree808a675b178dcaddeeed480720bb2ebfdb1da59a
parentea1b86127814aff54b2ab821db060865af920437
[libc++] Re-add transitive includes that had been removed since LLVM 14

This commit re-adds transitive includes that had been removed by
4cd04d1687f1c36870c8e79ca83f4b9cda571458458b558d2e2f3158c604,
and 489637e66dd3. This should cover almost all the includes that had
been removed since LLVM 14 and that would contribute to breaking user
code when releasing LLVM 15.

It is possible to disable the inclusion of these headers by defining
_LIBCPP_REMOVE_TRANSITIVE_INCLUDES. The intent is that vendors will
enable that macro and start fixing downstream issues immediately. We
can then remove the macro (and the transitive includes) by default in
a future release. That way, we will break users only once by removing
transitive includes in bulk instead of doing it bit by bit a every
release, which is more disruptive for users.

Note 1: The set of headers to re-add was found by re-generating the
        transitive include test on a checkout of release/14.x, which
        provided the list of all transitive includes we used to provide.

Note 2: Several includes of <vector>, <optional>, <array> and <unordered_map>
        have been added in this commit. These transitive inclusions were
        added when we implemented boyer_moore_searcher in <functional>.

Note 3: This is a best effort patch to try and resolve downstream breakage
        caused since branching LLVM 14. I wasn't able to perfectly mirror
        transitive includes in LLVM 14 for a few headers, so I added a
        release note explaining it. To summarize, adding boyer_moore_searcher
        created a bunch of circular dependencies, so we have to break
        backwards compatibility in a few cases.

Differential Revision: https://reviews.llvm.org/D128661
126 files changed:
libcxx/cmake/caches/Generic-no-transitive-includes.cmake [new file with mode: 0644]
libcxx/docs/ReleaseNotes.rst
libcxx/include/algorithm
libcxx/include/any
libcxx/include/array
libcxx/include/atomic
libcxx/include/bit
libcxx/include/charconv
libcxx/include/coroutine
libcxx/include/deque
libcxx/include/experimental/simd
libcxx/include/experimental/unordered_map
libcxx/include/ext/hash_map
libcxx/include/ext/hash_set
libcxx/include/forward_list
libcxx/include/functional
libcxx/include/future
libcxx/include/iterator
libcxx/include/list
libcxx/include/locale
libcxx/include/map
libcxx/include/memory
libcxx/include/mutex
libcxx/include/numeric
libcxx/include/optional
libcxx/include/ostream
libcxx/include/queue
libcxx/include/random
libcxx/include/regex
libcxx/include/set
libcxx/include/span
libcxx/include/stack
libcxx/include/string
libcxx/include/string_view
libcxx/include/thread
libcxx/include/tuple
libcxx/include/typeindex
libcxx/include/unordered_map
libcxx/include/unordered_set
libcxx/include/utility
libcxx/include/valarray
libcxx/include/variant
libcxx/include/vector
libcxx/test/libcxx/transitive_includes.sh.cpp
libcxx/test/libcxx/transitive_includes/expected.algorithm
libcxx/test/libcxx/transitive_includes/expected.any
libcxx/test/libcxx/transitive_includes/expected.array
libcxx/test/libcxx/transitive_includes/expected.atomic
libcxx/test/libcxx/transitive_includes/expected.barrier
libcxx/test/libcxx/transitive_includes/expected.bit
libcxx/test/libcxx/transitive_includes/expected.bitset
libcxx/test/libcxx/transitive_includes/expected.ccomplex
libcxx/test/libcxx/transitive_includes/expected.charconv
libcxx/test/libcxx/transitive_includes/expected.codecvt
libcxx/test/libcxx/transitive_includes/expected.complex
libcxx/test/libcxx/transitive_includes/expected.condition_variable
libcxx/test/libcxx/transitive_includes/expected.coroutine
libcxx/test/libcxx/transitive_includes/expected.ctgmath
libcxx/test/libcxx/transitive_includes/expected.deque
libcxx/test/libcxx/transitive_includes/expected.experimental_algorithm
libcxx/test/libcxx/transitive_includes/expected.experimental_coroutine
libcxx/test/libcxx/transitive_includes/expected.experimental_deque
libcxx/test/libcxx/transitive_includes/expected.experimental_forward_list
libcxx/test/libcxx/transitive_includes/expected.experimental_functional
libcxx/test/libcxx/transitive_includes/expected.experimental_iterator
libcxx/test/libcxx/transitive_includes/expected.experimental_list
libcxx/test/libcxx/transitive_includes/expected.experimental_map
libcxx/test/libcxx/transitive_includes/expected.experimental_memory_resource
libcxx/test/libcxx/transitive_includes/expected.experimental_regex
libcxx/test/libcxx/transitive_includes/expected.experimental_set
libcxx/test/libcxx/transitive_includes/expected.experimental_simd
libcxx/test/libcxx/transitive_includes/expected.experimental_string
libcxx/test/libcxx/transitive_includes/expected.experimental_unordered_map
libcxx/test/libcxx/transitive_includes/expected.experimental_unordered_set
libcxx/test/libcxx/transitive_includes/expected.experimental_utility
libcxx/test/libcxx/transitive_includes/expected.experimental_vector
libcxx/test/libcxx/transitive_includes/expected.ext_hash_map
libcxx/test/libcxx/transitive_includes/expected.ext_hash_set
libcxx/test/libcxx/transitive_includes/expected.filesystem
libcxx/test/libcxx/transitive_includes/expected.format
libcxx/test/libcxx/transitive_includes/expected.forward_list
libcxx/test/libcxx/transitive_includes/expected.fstream
libcxx/test/libcxx/transitive_includes/expected.functional
libcxx/test/libcxx/transitive_includes/expected.future
libcxx/test/libcxx/transitive_includes/expected.iomanip
libcxx/test/libcxx/transitive_includes/expected.ios
libcxx/test/libcxx/transitive_includes/expected.iostream
libcxx/test/libcxx/transitive_includes/expected.istream
libcxx/test/libcxx/transitive_includes/expected.iterator
libcxx/test/libcxx/transitive_includes/expected.latch
libcxx/test/libcxx/transitive_includes/expected.list
libcxx/test/libcxx/transitive_includes/expected.locale
libcxx/test/libcxx/transitive_includes/expected.map
libcxx/test/libcxx/transitive_includes/expected.memory
libcxx/test/libcxx/transitive_includes/expected.mutex
libcxx/test/libcxx/transitive_includes/expected.numeric
libcxx/test/libcxx/transitive_includes/expected.optional
libcxx/test/libcxx/transitive_includes/expected.ostream
libcxx/test/libcxx/transitive_includes/expected.queue
libcxx/test/libcxx/transitive_includes/expected.random
libcxx/test/libcxx/transitive_includes/expected.ranges
libcxx/test/libcxx/transitive_includes/expected.regex
libcxx/test/libcxx/transitive_includes/expected.scoped_allocator
libcxx/test/libcxx/transitive_includes/expected.semaphore
libcxx/test/libcxx/transitive_includes/expected.set
libcxx/test/libcxx/transitive_includes/expected.shared_mutex
libcxx/test/libcxx/transitive_includes/expected.span
libcxx/test/libcxx/transitive_includes/expected.sstream
libcxx/test/libcxx/transitive_includes/expected.stack
libcxx/test/libcxx/transitive_includes/expected.streambuf
libcxx/test/libcxx/transitive_includes/expected.string
libcxx/test/libcxx/transitive_includes/expected.string_view
libcxx/test/libcxx/transitive_includes/expected.strstream
libcxx/test/libcxx/transitive_includes/expected.system_error
libcxx/test/libcxx/transitive_includes/expected.thread
libcxx/test/libcxx/transitive_includes/expected.tuple
libcxx/test/libcxx/transitive_includes/expected.typeindex
libcxx/test/libcxx/transitive_includes/expected.unordered_map
libcxx/test/libcxx/transitive_includes/expected.unordered_set
libcxx/test/libcxx/transitive_includes/expected.utility
libcxx/test/libcxx/transitive_includes/expected.valarray
libcxx/test/libcxx/transitive_includes/expected.variant
libcxx/test/libcxx/transitive_includes/expected.vector
libcxx/utils/ci/buildkite-pipeline.yml
libcxx/utils/ci/run-buildbot
libcxx/utils/libcxx/test/params.py