From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 30F9C3858D38 for ; Wed, 5 Apr 2023 10:52:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 30F9C3858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680691932; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1KgJhR+W9Pue7Gu9VJprf8JLa2PsaShikPzMt50ATdI=; b=Q6ctSnVw/suCfaF18pKo5R3ag/FNL7BhcqJE8t8MPgjlhP81kyLgFNHu+klEnUgm/h8ubj K6ihJ69kZHUWefXpxA4KTmZbWwPzTPwSzT0rW6chex7vDaKLe6Mhv+oFb2eTLehCxPlIsD WUdJNuqsWrrULHROc2Ubu/0xxm6iu5I= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-368-W2cYwsjcP4yIKYFBaMcUPQ-1; Wed, 05 Apr 2023 06:52:09 -0400 X-MC-Unique: W2cYwsjcP4yIKYFBaMcUPQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8552B884622; Wed, 5 Apr 2023 10:52:09 +0000 (UTC) Received: from localhost (unknown [10.33.37.12]) by smtp.corp.redhat.com (Postfix) with ESMTP id 316852027062; Wed, 5 Apr 2023 10:52:09 +0000 (UTC) Date: Wed, 5 Apr 2023 11:52:08 +0100 From: Jonathan Wakely To: Arsen =?utf-8?Q?Arsenovi=C4=87?= Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: Re: [PATCH 1/4] libstdc++: Harmonize and other headers Message-ID: References: <20230404230950.158556-1-arsen@aarsen.me> MIME-Version: 1.0 In-Reply-To: <20230404230950.158556-1-arsen@aarsen.me> X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 05/04/23 01:09 +0200, Arsen Arsenović wrote: >Due to recent, large changes in libstdc++, the feature test macros >declared in got out of sync with the other headers that >possibly declare them. > >libstdc++-v3/ChangeLog: > > * include/bits/unique_ptr.h (__cpp_lib_constexpr_memory): > Synchronize the definition block with... > * include/bits/ptr_traits.h (__cpp_lib_constexpr_memory): > ... this one here. Also define the 202202L value, rather than > leaving it up to purely unique_ptr.h, so that the value is > synchronized across all headers. > (__gnu_debug::_Safe_iterator_base): Move into new conditional > block. > * include/std/memory (__cpp_lib_atomic_value_initialization): > Define on freestanding under the same conditions as in > atomic_base.h. > * include/std/version (__cpp_lib_robust_nonmodifying_seq_ops): > Also define on freestanding. > (__cpp_lib_to_chars): Ditto. > (__cpp_lib_gcd): Ditto. > (__cpp_lib_gcd_lcm): Ditto. > (__cpp_lib_raw_memory_algorithms): Ditto. > (__cpp_lib_array_constexpr): Ditto. > (__cpp_lib_nonmember_container_access): Ditto. > (__cpp_lib_clamp): Ditto. > (__cpp_lib_constexpr_char_traits): Ditto. > (__cpp_lib_constexpr_string): Ditto. > (__cpp_lib_sample): Ditto. > (__cpp_lib_lcm): Ditto. > (__cpp_lib_constexpr_iterator): Ditto. > (__cpp_lib_constexpr_char_traits): Ditto. > (__cpp_lib_interpolate): Ditto. > (__cpp_lib_constexpr_utility): Ditto. > (__cpp_lib_shift): Ditto. > (__cpp_lib_ranges): Ditto. > (__cpp_lib_move_iterator_concept): Ditto. > (__cpp_lib_constexpr_numeric): Ditto. > (__cpp_lib_constexpr_functional): Ditto. > (__cpp_lib_constexpr_algorithms): Ditto. > (__cpp_lib_constexpr_tuple): Ditto. > (__cpp_lib_constexpr_memory): Ditto. >--- >Evening, > >This patchset is a replacement to and extension of the one presented at >https://inbox.sourceware.org/libstdc++/20230309222626.4008373-1-arsen@aarsen.me/ >... that has been rebased as to include newer additions, and extended to >cover some regressions that seem to have occurred recently in >freestanding mode. > >Tested on x86_64-pc-linux-gnu. > >OK for trunk? > >Thanks in advance, have a lovely night. > > libstdc++-v3/include/bits/ptr_traits.h | 13 ++-- > libstdc++-v3/include/bits/unique_ptr.h | 11 ++-- > libstdc++-v3/include/std/memory | 6 ++ > libstdc++-v3/include/std/version | 85 ++++++++++++++------------ > 4 files changed, 66 insertions(+), 49 deletions(-) > >diff --git a/libstdc++-v3/include/bits/ptr_traits.h b/libstdc++-v3/include/bits/ptr_traits.h >index dc42a743c96..f6cc6b65f93 100644 >--- a/libstdc++-v3/include/bits/ptr_traits.h >+++ b/libstdc++-v3/include/bits/ptr_traits.h >@@ -34,12 +34,15 @@ > > #include > >+/* Duplicate definition with unique_ptr.h. */ >+#if __cplusplus > 202002L && defined(__cpp_constexpr_dynamic_alloc) >+# define __cpp_lib_constexpr_memory 202202L >+#elif __cplusplus > 201703L >+# include Including is unrelated to the FTM, and should always be done for >= C++17, but this change means it's not included for the first block. Please leave the #include with the _Safe_iterator_base declaration. >+# define __cpp_lib_constexpr_memory 201811L >+#endif >+ > #if __cplusplus > 201703L >-#include >-# ifndef __cpp_lib_constexpr_memory >-// Defined to a newer value in bits/unique_ptr.h for C++23 >-# define __cpp_lib_constexpr_memory 201811L >-# endif > namespace __gnu_debug { struct _Safe_iterator_base; } > #endif > >diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h >index c8daff41865..f0c6d2383b4 100644 >--- a/libstdc++-v3/include/bits/unique_ptr.h >+++ b/libstdc++-v3/include/bits/unique_ptr.h >@@ -43,12 +43,11 @@ > # endif > #endif > >-#if __cplusplus > 202002L && __cpp_constexpr_dynamic_alloc >-# if __cpp_lib_constexpr_memory < 202202L >-// Defined with older value in bits/ptr_traits.h for C++20 >-# undef __cpp_lib_constexpr_memory >-# define __cpp_lib_constexpr_memory 202202L >-# endif >+/* Duplicate definition with ptr_traits.h. */ >+#if __cplusplus > 202002L && defined(__cpp_constexpr_dynamic_alloc) >+# define __cpp_lib_constexpr_memory 202202L >+#elif __cplusplus > 201703L >+# define __cpp_lib_constexpr_memory 201811L > #endif > > namespace std _GLIBCXX_VISIBILITY(default) >diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory >index 341f9857730..85c36d67ee1 100644 >--- a/libstdc++-v3/include/std/memory >+++ b/libstdc++-v3/include/std/memory >@@ -91,6 +91,12 @@ > # include > #endif > >+/* As a hack, we declare __cpp_lib_atomic_value_initialization here even though >+ we don't include the bit that actually declares it, for consistency. */ >+#if !defined(__cpp_lib_atomic_value_initialization) && __cplusplus >= 202002L >+# define __cpp_lib_atomic_value_initialization 201911L >+#endif >+ > #if __cplusplus >= 201103L && __cplusplus <= 202002L && _GLIBCXX_HOSTED > namespace std _GLIBCXX_VISIBILITY(default) > { >diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version >index a19c39c6cdd..0239fcea813 100644 >--- a/libstdc++-v3/include/std/version >+++ b/libstdc++-v3/include/std/version >@@ -85,6 +85,12 @@ > #define __cpp_lib_transparent_operators 201510L > #define __cpp_lib_tuple_element_t 201402L > #define __cpp_lib_tuples_by_type 201304L >+#define __cpp_lib_robust_nonmodifying_seq_ops 201304L Pleae keep them in alphabetical order (within their relevant blocks/groups). >+ >+#if _GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 \ >+ && __SIZE_WIDTH__ >= 32 >+# define __cpp_lib_to_chars 201611L >+#endif > > #if _GLIBCXX_HOSTED > # define __cpp_lib_chrono_udls 201304L >@@ -92,7 +98,6 @@ > # define __cpp_lib_generic_associative_lookup 201304L > # define __cpp_lib_make_unique 201304L > # define __cpp_lib_quoted_string_io 201304L >-# define __cpp_lib_robust_nonmodifying_seq_ops 201304L > # ifdef _GLIBCXX_HAS_GTHREADS > # define __cpp_lib_shared_timed_mutex 201402L > # endif >@@ -136,13 +141,13 @@ > # define __cpp_lib_variant 202102L > #endif > #define __cpp_lib_void_t 201411L >- >-#if _GLIBCXX_HOSTED >+#define __cpp_lib_gcd 201606L >+#define __cpp_lib_gcd_lcm 201606L >+#define __cpp_lib_raw_memory_algorithms 201606L > #if __cplusplus == 201703L // N.B. updated value in C++20 > # define __cpp_lib_array_constexpr 201803L > #endif >-#define __cpp_lib_boyer_moore_searcher 201603L >-#define __cpp_lib_chrono 201611L >+#define __cpp_lib_nonmember_container_access 201411L > #define __cpp_lib_clamp 201603L > #if __cplusplus == 201703L // N.B. updated value in C++20 > # if _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED >@@ -150,13 +155,16 @@ > # define __cpp_lib_constexpr_string 201611L > # endif > #endif >+#define __cpp_lib_sample 201603L >+#define __cpp_lib_lcm 201606L >+ >+#if _GLIBCXX_HOSTED >+#define __cpp_lib_boyer_moore_searcher 201603L >+#define __cpp_lib_chrono 201611L > #define __cpp_lib_enable_shared_from_this 201603L > #define __cpp_lib_execution 201902L // FIXME: should be 201603L > #define __cpp_lib_filesystem 201703L >-#define __cpp_lib_gcd 201606L >-#define __cpp_lib_gcd_lcm 201606L > #define __cpp_lib_hypot 201603L >-#define __cpp_lib_lcm 201606L > #define __cpp_lib_map_try_emplace 201411L > #define __cpp_lib_math_special_functions 201603L > #ifdef _GLIBCXX_HAS_GTHREADS >@@ -165,20 +173,13 @@ > # define __cpp_lib_memory_resource 1 > #endif > #define __cpp_lib_node_extract 201606L >-#define __cpp_lib_nonmember_container_access 201411L > #define __cpp_lib_parallel_algorithm 201603L >-#define __cpp_lib_raw_memory_algorithms 201606L >-#define __cpp_lib_sample 201603L > #ifdef _GLIBCXX_HAS_GTHREADS > # define __cpp_lib_scoped_lock 201703L > # define __cpp_lib_shared_mutex 201505L > #endif > #define __cpp_lib_shared_ptr_weak_type 201606L > #define __cpp_lib_string_view 201803L >-#if _GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 \ >- && __SIZE_WIDTH__ >= 32 >-# define __cpp_lib_to_chars 201611L >-#endif > #define __cpp_lib_unordered_map_try_emplace 201411L > #endif > >@@ -224,7 +225,9 @@ > #if __cpp_lib_concepts > # define __cpp_lib_make_obj_using_allocator 201811L > #endif >-#define __cpp_lib_optional 202106L >+#if __cplusplus <= 202002L // N.B. updated value in C++23 >+# define __cpp_lib_optional 202106L >+#endif > #define __cpp_lib_remove_cvref 201711L > #if __has_builtin(__builtin_source_location) > # define __cpp_lib_source_location 201907L >@@ -243,9 +246,27 @@ > #if __cpp_concepts >= 202002L && __cpp_constexpr >= 201811L > # define __cpp_lib_variant 202106L > #endif >- >-#if _GLIBCXX_HOSTED > #define __cpp_lib_array_constexpr 201811L >+#define __cpp_lib_constexpr_iterator 201811L >+#ifdef __cpp_lib_is_constant_evaluated >+# define __cpp_lib_constexpr_char_traits 201811L >+#endif >+#define __cpp_lib_interpolate 201902L >+#define __cpp_lib_constexpr_utility 201811L >+#define __cpp_lib_shift 201806L >+#if __cpp_lib_concepts >+# define __cpp_lib_move_iterator_concept 202207L >+# define __cpp_lib_ranges 202110L >+#endif >+#define __cpp_lib_constexpr_numeric 201911L >+#define __cpp_lib_constexpr_functional 201907L >+#define __cpp_lib_constexpr_algorithms 201806L >+#define __cpp_lib_constexpr_tuple 201811L >+#if __cplusplus <= 202002L // N.B. updated value in C++23 >+# define __cpp_lib_constexpr_memory 201811L >+#endif // C++20 >+ >+#if _GLIBCXX_HOSTED > #define __cpp_lib_atomic_shared_ptr 201711L > #if defined _GLIBCXX_HAS_GTHREADS || defined _GLIBCXX_HAVE_LINUX_FUTEX > # define __cpp_lib_atomic_wait 201907L >@@ -256,16 +277,9 @@ > // #undef __cpp_lib_chrono > // #define __cpp_lib_chrono 201907L > // FIXME: #define __cpp_lib_execution 201902L >-#define __cpp_lib_constexpr_algorithms 201806L >-#ifdef __cpp_lib_is_constant_evaluated >-# define __cpp_lib_constexpr_char_traits 201811L >-#endif > #define __cpp_lib_constexpr_complex 201711L > #define __cpp_lib_constexpr_dynamic_alloc 201907L >-#define __cpp_lib_constexpr_functional 201907L >-#define __cpp_lib_constexpr_iterator 201811L >-#define __cpp_lib_constexpr_memory 201811L >-#define __cpp_lib_constexpr_numeric 201911L >+#define __cpp_lib_constexpr_tuple 201811L > #ifdef __cpp_lib_is_constant_evaluated > # if _GLIBCXX_USE_CXX11_ABI > # define __cpp_lib_constexpr_string 201907L >@@ -273,13 +287,10 @@ > # define __cpp_lib_constexpr_string 201811L > # endif > #endif >-#define __cpp_lib_constexpr_tuple 201811L >-#define __cpp_lib_constexpr_utility 201811L > #define __cpp_lib_constexpr_vector 201907L > #define __cpp_lib_erase_if 202002L > #define __cpp_lib_format 202106L > #define __cpp_lib_generic_unordered_lookup 201811L >-#define __cpp_lib_interpolate 201902L > #ifdef _GLIBCXX_HAS_GTHREADS > # define __cpp_lib_jthread 201911L > #endif >@@ -288,15 +299,10 @@ > #endif > #define __cpp_lib_list_remove_return_type 201806L > #define __cpp_lib_polymorphic_allocator 201902L >-#if __cpp_lib_concepts >-# define __cpp_lib_ranges 202110L >-# define __cpp_lib_move_iterator_concept 202207L >-#endif > #if __cpp_lib_atomic_wait || _GLIBCXX_HAVE_POSIX_SEMAPHORE > # define __cpp_lib_semaphore 201907L > #endif > #define __cpp_lib_shared_ptr_arrays 201707L >-#define __cpp_lib_shift 201806L > #define __cpp_lib_smart_ptr_for_overwrite 202002L > # if _GLIBCXX_USE_CXX11_ABI > // Only supported with cxx11-abi >@@ -330,14 +336,17 @@ > #define __cpp_lib_ranges_stride 202207L > #define __cpp_lib_ranges_cartesian_product 202207L > #define __cpp_lib_ranges_as_rvalue 202207L >- >-#if _GLIBCXX_HOSTED >-#define __cpp_lib_adaptor_iterator_pair_constructor 202106L > #if __cpp_constexpr_dynamic_alloc >-# define __cpp_lib_constexpr_bitset 202202L >+# if _GLIBCXX_HOSTED >+# define __cpp_lib_constexpr_bitset 202202L >+# endif > # undef __cpp_lib_constexpr_memory > # define __cpp_lib_constexpr_memory 202202L > #endif >+#define __cpp_lib_stdatomic_h 202011L >+ >+#if _GLIBCXX_HOSTED >+#define __cpp_lib_adaptor_iterator_pair_constructor 202106L > #define __cpp_lib_ios_noreplace 202207L > #define __cpp_lib_move_only_function 202110L > #if __cpp_lib_span