From ec11388b3342a2b22eae22fd13ff4997b103d155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 4 Dec 2022 07:39:41 +0100 Subject: [PATCH] [libc++] Rename __tuple to __tuple_dir to avoid file collision Rename the `__tuple` directory in libc++ headers to `__tuple_dir` to avoid file collision when installing. Historically, `__tuple` has been a file and it has been replaced by a directory in 2d52c6bfae801b016dd3627b8c0e7c4a99405549. Replacing a regular file with a directory (or more importantly, the other way around when downgrading) is not universally supported. Since this is an internal header, its actual name should not matter, so just rename it to avoid problems. Differential Revision: https://reviews.llvm.org/D139270 --- libcxx/include/CMakeLists.txt | 16 ++++++++-------- libcxx/include/__functional/hash.h | 2 +- libcxx/include/__fwd/get.h | 2 +- libcxx/include/__memory/compressed_pair.h | 2 +- libcxx/include/__ranges/subrange.h | 4 ++-- .../include/{__tuple => __tuple_dir}/apply_cv.h | 0 .../{__tuple => __tuple_dir}/make_tuple_types.h | 10 +++++----- .../{__tuple => __tuple_dir}/sfinae_helpers.h | 10 +++++----- .../{__tuple => __tuple_dir}/tuple_element.h | 4 ++-- .../{__tuple => __tuple_dir}/tuple_indices.h | 0 .../{__tuple => __tuple_dir}/tuple_like.h | 2 +- .../{__tuple => __tuple_dir}/tuple_size.h | 2 +- .../{__tuple => __tuple_dir}/tuple_types.h | 0 libcxx/include/__utility/pair.h | 8 ++++---- libcxx/include/array | 6 +++--- libcxx/include/libcxx.imp | 2 +- libcxx/include/module.modulemap.in | 16 ++++++++-------- libcxx/include/optional | 2 +- libcxx/include/ranges | 4 ++-- libcxx/include/utility | 4 ++-- libcxx/test/libcxx/private_headers.verify.cpp | 16 ++++++++-------- libcxx/utils/generate_iwyu_mapping.py | 4 +++- 22 files changed, 59 insertions(+), 57 deletions(-) rename libcxx/include/{__tuple => __tuple_dir}/apply_cv.h (100%) rename libcxx/include/{__tuple => __tuple_dir}/make_tuple_types.h (93%) rename libcxx/include/{__tuple => __tuple_dir}/sfinae_helpers.h (97%) rename libcxx/include/{__tuple => __tuple_dir}/tuple_element.h (97%) rename libcxx/include/{__tuple => __tuple_dir}/tuple_indices.h (100%) rename libcxx/include/{__tuple => __tuple_dir}/tuple_like.h (97%) rename libcxx/include/{__tuple => __tuple_dir}/tuple_size.h (98%) rename libcxx/include/{__tuple => __tuple_dir}/tuple_types.h (100%) diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index 62fa8d96d060..ea1e23af1c9d 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -540,14 +540,14 @@ set(files __thread/timed_backoff_policy.h __threading_support __tree - __tuple/apply_cv.h - __tuple/make_tuple_types.h - __tuple/sfinae_helpers.h - __tuple/tuple_element.h - __tuple/tuple_indices.h - __tuple/tuple_like.h - __tuple/tuple_size.h - __tuple/tuple_types.h + __tuple_dir/apply_cv.h + __tuple_dir/make_tuple_types.h + __tuple_dir/sfinae_helpers.h + __tuple_dir/tuple_element.h + __tuple_dir/tuple_indices.h + __tuple_dir/tuple_like.h + __tuple_dir/tuple_size.h + __tuple_dir/tuple_types.h __type_traits/add_const.h __type_traits/add_cv.h __type_traits/add_lvalue_reference.h diff --git a/libcxx/include/__functional/hash.h b/libcxx/include/__functional/hash.h index 041730dfb6b1..64412fc9f6a8 100644 --- a/libcxx/include/__functional/hash.h +++ b/libcxx/include/__functional/hash.h @@ -12,7 +12,7 @@ #include <__config> #include <__functional/unary_function.h> #include <__fwd/hash.h> -#include <__tuple/sfinae_helpers.h> +#include <__tuple_dir/sfinae_helpers.h> #include <__utility/forward.h> #include <__utility/move.h> #include <__utility/pair.h> diff --git a/libcxx/include/__fwd/get.h b/libcxx/include/__fwd/get.h index 81624038980e..98758ebca0df 100644 --- a/libcxx/include/__fwd/get.h +++ b/libcxx/include/__fwd/get.h @@ -13,7 +13,7 @@ #include <__fwd/array.h> #include <__fwd/pair.h> #include <__fwd/tuple.h> -#include <__tuple/tuple_element.h> +#include <__tuple_dir/tuple_element.h> #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__memory/compressed_pair.h b/libcxx/include/__memory/compressed_pair.h index 9dd42f8d6eb6..6f747e78bfad 100644 --- a/libcxx/include/__memory/compressed_pair.h +++ b/libcxx/include/__memory/compressed_pair.h @@ -13,7 +13,7 @@ #include <__config> #include <__fwd/get.h> #include <__fwd/tuple.h> -#include <__tuple/tuple_indices.h> +#include <__tuple_dir/tuple_indices.h> #include <__type_traits/dependent_type.h> #include <__utility/forward.h> #include <__utility/move.h> diff --git a/libcxx/include/__ranges/subrange.h b/libcxx/include/__ranges/subrange.h index 3efcd9602a20..55689fe42d53 100644 --- a/libcxx/include/__ranges/subrange.h +++ b/libcxx/include/__ranges/subrange.h @@ -28,8 +28,8 @@ #include <__ranges/enable_borrowed_range.h> #include <__ranges/size.h> #include <__ranges/view_interface.h> -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_size.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_size.h> #include <__utility/move.h> #include diff --git a/libcxx/include/__tuple/apply_cv.h b/libcxx/include/__tuple_dir/apply_cv.h similarity index 100% rename from libcxx/include/__tuple/apply_cv.h rename to libcxx/include/__tuple_dir/apply_cv.h diff --git a/libcxx/include/__tuple/make_tuple_types.h b/libcxx/include/__tuple_dir/make_tuple_types.h similarity index 93% rename from libcxx/include/__tuple/make_tuple_types.h rename to libcxx/include/__tuple_dir/make_tuple_types.h index 38e2547d13dc..913ff9bbd60c 100644 --- a/libcxx/include/__tuple/make_tuple_types.h +++ b/libcxx/include/__tuple_dir/make_tuple_types.h @@ -12,11 +12,11 @@ #include <__config> #include <__fwd/array.h> #include <__fwd/tuple.h> -#include <__tuple/apply_cv.h> -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_indices.h> -#include <__tuple/tuple_size.h> -#include <__tuple/tuple_types.h> +#include <__tuple_dir/apply_cv.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_indices.h> +#include <__tuple_dir/tuple_size.h> +#include <__tuple_dir/tuple_types.h> #include <__type_traits/remove_cv.h> #include <__type_traits/remove_reference.h> #include diff --git a/libcxx/include/__tuple/sfinae_helpers.h b/libcxx/include/__tuple_dir/sfinae_helpers.h similarity index 97% rename from libcxx/include/__tuple/sfinae_helpers.h rename to libcxx/include/__tuple_dir/sfinae_helpers.h index ef3967015b80..fde53419d07b 100644 --- a/libcxx/include/__tuple/sfinae_helpers.h +++ b/libcxx/include/__tuple_dir/sfinae_helpers.h @@ -11,11 +11,11 @@ #include <__config> #include <__fwd/tuple.h> -#include <__tuple/make_tuple_types.h> -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_like.h> -#include <__tuple/tuple_size.h> -#include <__tuple/tuple_types.h> +#include <__tuple_dir/make_tuple_types.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_like.h> +#include <__tuple_dir/tuple_size.h> +#include <__tuple_dir/tuple_types.h> #include <__type_traits/enable_if.h> #include <__type_traits/integral_constant.h> #include <__type_traits/is_assignable.h> diff --git a/libcxx/include/__tuple/tuple_element.h b/libcxx/include/__tuple_dir/tuple_element.h similarity index 97% rename from libcxx/include/__tuple/tuple_element.h rename to libcxx/include/__tuple_dir/tuple_element.h index d30b2c148dbf..06f49bf500fb 100644 --- a/libcxx/include/__tuple/tuple_element.h +++ b/libcxx/include/__tuple_dir/tuple_element.h @@ -10,8 +10,8 @@ #define _LIBCPP___TUPLE_TUPLE_ELEMENT_H #include <__config> -#include <__tuple/tuple_indices.h> -#include <__tuple/tuple_types.h> +#include <__tuple_dir/tuple_indices.h> +#include <__tuple_dir/tuple_types.h> #include <__type_traits/add_const.h> #include <__type_traits/add_cv.h> #include <__type_traits/add_volatile.h> diff --git a/libcxx/include/__tuple/tuple_indices.h b/libcxx/include/__tuple_dir/tuple_indices.h similarity index 100% rename from libcxx/include/__tuple/tuple_indices.h rename to libcxx/include/__tuple_dir/tuple_indices.h diff --git a/libcxx/include/__tuple/tuple_like.h b/libcxx/include/__tuple_dir/tuple_like.h similarity index 97% rename from libcxx/include/__tuple/tuple_like.h rename to libcxx/include/__tuple_dir/tuple_like.h index 3b596916a65e..327287786e3b 100644 --- a/libcxx/include/__tuple/tuple_like.h +++ b/libcxx/include/__tuple_dir/tuple_like.h @@ -13,7 +13,7 @@ #include <__fwd/array.h> #include <__fwd/pair.h> #include <__fwd/tuple.h> -#include <__tuple/tuple_types.h> +#include <__tuple_dir/tuple_types.h> #include <__type_traits/integral_constant.h> #include diff --git a/libcxx/include/__tuple/tuple_size.h b/libcxx/include/__tuple_dir/tuple_size.h similarity index 98% rename from libcxx/include/__tuple/tuple_size.h rename to libcxx/include/__tuple_dir/tuple_size.h index 26f9d9725d31..d551b2258cba 100644 --- a/libcxx/include/__tuple/tuple_size.h +++ b/libcxx/include/__tuple_dir/tuple_size.h @@ -11,7 +11,7 @@ #include <__config> #include <__fwd/tuple.h> -#include <__tuple/tuple_types.h> +#include <__tuple_dir/tuple_types.h> #include <__type_traits/is_const.h> #include <__type_traits/is_volatile.h> #include diff --git a/libcxx/include/__tuple/tuple_types.h b/libcxx/include/__tuple_dir/tuple_types.h similarity index 100% rename from libcxx/include/__tuple/tuple_types.h rename to libcxx/include/__tuple_dir/tuple_types.h diff --git a/libcxx/include/__utility/pair.h b/libcxx/include/__utility/pair.h index d9286891189e..e1832980b389 100644 --- a/libcxx/include/__utility/pair.h +++ b/libcxx/include/__utility/pair.h @@ -15,10 +15,10 @@ #include <__functional/unwrap_ref.h> #include <__fwd/get.h> #include <__fwd/tuple.h> -#include <__tuple/sfinae_helpers.h> -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_indices.h> -#include <__tuple/tuple_size.h> +#include <__tuple_dir/sfinae_helpers.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_indices.h> +#include <__tuple_dir/tuple_size.h> #include <__type_traits/is_implicitly_default_constructible.h> #include <__utility/forward.h> #include <__utility/move.h> diff --git a/libcxx/include/array b/libcxx/include/array index cb1a6d120258..068a6bd4cc42 100644 --- a/libcxx/include/array +++ b/libcxx/include/array @@ -115,7 +115,7 @@ template const T&& get(const array&&) noexce #include <__assert> // all public C++ headers provide the assertion handler #include <__config> #include <__iterator/reverse_iterator.h> -#include <__tuple/sfinae_helpers.h> +#include <__tuple_dir/sfinae_helpers.h> #include <__utility/integer_sequence.h> #include <__utility/move.h> #include <__utility/unreachable.h> @@ -137,8 +137,8 @@ template const T&& get(const array&&) noexce #include // [tuple.helper] -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_size.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_size.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header diff --git a/libcxx/include/libcxx.imp b/libcxx/include/libcxx.imp index b2a018e30b2f..2c591b71737b 100644 --- a/libcxx/include/libcxx.imp +++ b/libcxx/include/libcxx.imp @@ -39,7 +39,7 @@ { include: [ "@<__string/.*>", "private", "", "public" ] }, { include: [ "@<__support/.*>", "private", "", "public" ] }, { include: [ "@<__thread/.*>", "private", "", "public" ] }, - { include: [ "@<__tuple/.*>", "private", "", "public" ] }, + { include: [ "@<__tuple_dir/.*>", "private", "", "public" ] }, { include: [ "@<__type_traits/.*>", "private", "", "public" ] }, { include: [ "@<__utility/.*>", "private", "", "public" ] }, { include: [ "@<__variant/.*>", "private", "", "public" ] }, diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in index 2a2064c74aea..c0473a4f3d2d 100644 --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -1342,16 +1342,16 @@ module std [system] { header "tuple" export * - module apply_cv { private header "__tuple/apply_cv.h" } + module apply_cv { private header "__tuple_dir/apply_cv.h" } module get_fwd { private header "__fwd/get.h" } - module make_tuple_types { private header "__tuple/make_tuple_types.h" } - module sfinae_helpers { private header "__tuple/sfinae_helpers.h" } - module tuple_element { private header "__tuple/tuple_element.h" } + module make_tuple_types { private header "__tuple_dir/make_tuple_types.h" } + module sfinae_helpers { private header "__tuple_dir/sfinae_helpers.h" } + module tuple_element { private header "__tuple_dir/tuple_element.h" } module tuple_fwd { private header "__fwd/tuple.h" } - module tuple_indices { private header "__tuple/tuple_indices.h" } - module tuple_like { private header "__tuple/tuple_like.h" } - module tuple_size { private header "__tuple/tuple_size.h" } - module tuple_types { private header "__tuple/tuple_types.h" } + module tuple_indices { private header "__tuple_dir/tuple_indices.h" } + module tuple_like { private header "__tuple_dir/tuple_like.h" } + module tuple_size { private header "__tuple_dir/tuple_size.h" } + module tuple_types { private header "__tuple_dir/tuple_types.h" } } module type_traits { header "type_traits" diff --git a/libcxx/include/optional b/libcxx/include/optional index 1061a0f9c378..a7a887a9cbdc 100644 --- a/libcxx/include/optional +++ b/libcxx/include/optional @@ -166,7 +166,7 @@ template #include <__functional/invoke.h> #include <__functional/unary_function.h> #include <__memory/construct_at.h> -#include <__tuple/sfinae_helpers.h> +#include <__tuple_dir/sfinae_helpers.h> #include <__utility/forward.h> #include <__utility/in_place.h> #include <__utility/move.h> diff --git a/libcxx/include/ranges b/libcxx/include/ranges index 643853e1d3ab..5928efa6027e 100644 --- a/libcxx/include/ranges +++ b/libcxx/include/ranges @@ -352,8 +352,8 @@ namespace std { #include // [tuple.helper] -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_size.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_size.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header diff --git a/libcxx/include/utility b/libcxx/include/utility index ac6c18b06abc..3cc7ce5b3025 100644 --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -267,8 +267,8 @@ template #include // [tuple.helper] -#include <__tuple/tuple_element.h> -#include <__tuple/tuple_size.h> +#include <__tuple_dir/tuple_element.h> +#include <__tuple_dir/tuple_size.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header diff --git a/libcxx/test/libcxx/private_headers.verify.cpp b/libcxx/test/libcxx/private_headers.verify.cpp index 23186a958197..6ecc220f50af 100644 --- a/libcxx/test/libcxx/private_headers.verify.cpp +++ b/libcxx/test/libcxx/private_headers.verify.cpp @@ -553,14 +553,14 @@ END-SCRIPT #include <__string/extern_template_lists.h> // expected-error@*:* {{use of private header from outside its module: '__string/extern_template_lists.h'}} #include <__thread/poll_with_backoff.h> // expected-error@*:* {{use of private header from outside its module: '__thread/poll_with_backoff.h'}} #include <__thread/timed_backoff_policy.h> // expected-error@*:* {{use of private header from outside its module: '__thread/timed_backoff_policy.h'}} -#include <__tuple/apply_cv.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/apply_cv.h'}} -#include <__tuple/make_tuple_types.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/make_tuple_types.h'}} -#include <__tuple/sfinae_helpers.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/sfinae_helpers.h'}} -#include <__tuple/tuple_element.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/tuple_element.h'}} -#include <__tuple/tuple_indices.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/tuple_indices.h'}} -#include <__tuple/tuple_like.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/tuple_like.h'}} -#include <__tuple/tuple_size.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/tuple_size.h'}} -#include <__tuple/tuple_types.h> // expected-error@*:* {{use of private header from outside its module: '__tuple/tuple_types.h'}} +#include <__tuple_dir/apply_cv.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/apply_cv.h'}} +#include <__tuple_dir/make_tuple_types.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/make_tuple_types.h'}} +#include <__tuple_dir/sfinae_helpers.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/sfinae_helpers.h'}} +#include <__tuple_dir/tuple_element.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/tuple_element.h'}} +#include <__tuple_dir/tuple_indices.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/tuple_indices.h'}} +#include <__tuple_dir/tuple_like.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/tuple_like.h'}} +#include <__tuple_dir/tuple_size.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/tuple_size.h'}} +#include <__tuple_dir/tuple_types.h> // expected-error@*:* {{use of private header from outside its module: '__tuple_dir/tuple_types.h'}} #include <__type_traits/add_const.h> // expected-error@*:* {{use of private header from outside its module: '__type_traits/add_const.h'}} #include <__type_traits/add_cv.h> // expected-error@*:* {{use of private header from outside its module: '__type_traits/add_cv.h'}} #include <__type_traits/add_lvalue_reference.h> // expected-error@*:* {{use of private header from outside its module: '__type_traits/add_lvalue_reference.h'}} diff --git a/libcxx/utils/generate_iwyu_mapping.py b/libcxx/utils/generate_iwyu_mapping.py index 615c6e3e534a..1e0242b954d3 100644 --- a/libcxx/utils/generate_iwyu_mapping.py +++ b/libcxx/utils/generate_iwyu_mapping.py @@ -30,8 +30,10 @@ def generate_map(include): c_headers.append(i.name) result = [] + temporary_mappings = {'__tuple_dir': 'tuple'} for i in detail_directories: - result.append(f'{generate(f"@<{i}/.*>", i[2:])},') + public_header = temporary_mappings.get(i, i.lstrip('_')) + result.append(f'{generate(f"@<{i}/.*>", public_header)},') for i in detail_files: public = []