From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id E30CB3858405 for ; Mon, 15 Nov 2021 18:16:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E30CB3858405 Received: by mail-ed1-x535.google.com with SMTP id y12so19366050eda.12 for ; Mon, 15 Nov 2021 10:16:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=7ggKO7/pYpwEQhciwybbNSloJ2LQ3SXMWGbX/fGJvL8=; b=KuCPqo+yeGc+W7IkgmmVoOBH1oec1VeM79qDn0JzagWDtzen3N6XJNuQx6pdM/KKDq o2Za8UozXQbd6XK9c6dzkUHdQ3byKDz2FJigqpEfzinMWGWY5w+g07E2zuWl4qXlYVk9 Tdk9AN/H1w+yV7M+keC87zWO/Ph2yzOjo8GWwCQDf5Lu6wobXBbcs8TVZ0rvvsveKQ/V E7zaQD0VIdRzoazAs7SoJmO8OrTE87QPsegxB9iICjtwkRJ0W4IUNf0SzmP7aeseBXzo OOZuuuaCAWUCf9c1a+G/0lmip1Nk6OCT+Yb6O8hHxl2cMk14slRqydRa2FpQ0IIJSx2S MREA== X-Gm-Message-State: AOAM530xp7c+vVyfBnJGueYUmkS+wlP5L5Gs1cml+u/dfLmFimUTrmN4 Z4yvOlPb2IEOItDF2LHKLJYkSGt+TXA= X-Google-Smtp-Source: ABdhPJw6k4VUsO70eNvRsikkWSZDrSdVsE4ZFSvUmY+qyNCwk1FTaJA/fVl64almERGDKPX6X5C24w== X-Received: by 2002:a17:907:1c07:: with SMTP id nc7mr1179549ejc.546.1637000207736; Mon, 15 Nov 2021 10:16:47 -0800 (PST) Received: from [10.31.6.133] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id o14sm7897613edj.15.2021.11.15.10.16.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Nov 2021 10:16:46 -0800 (PST) Subject: Re: [PATH][_GLIBCXX_DEBUG] Fix unordered container merge To: Jonathan Wakely Cc: Jonathan Wakely , libstdc++ References: <4eec3fb9-851e-3e4e-f9f4-1110db3af747@gmail.com> <6c349652-8b6f-2027-08c3-6ce58a765aeb@gmail.com> <22bf1b42-8cf4-7a6e-d5dc-c322ccbb2b46@gmail.com> <68641ea0-2a14-e3a5-8315-a7b3a9c1fdb4@gmail.com> <3c792e6f-6ee7-200f-84bd-0eb56281888b@gmail.com> From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Message-ID: <94f3009e-4a34-2add-e2da-a2fea28e924d@gmail.com> Date: Mon, 15 Nov 2021 19:16:41 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------6B98F9C4F05BB9D73FCE1650" Content-Language: fr X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Nov 2021 18:16:51 -0000 This is a multi-part message in MIME format. --------------6B98F9C4F05BB9D73FCE1650 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 10/11/21 10:38 am, Jonathan Wakely wrote: > > > On Wed, 10 Nov 2021 at 05:47, François Dumont > wrote: > > On 09/11/21 5:25 pm, Jonathan Wakely wrote: >> >> >> On Mon, 8 Nov 2021 at 21:36, François Dumont >> > wrote: >> >> Yet another version this time with only 1 guard >> implementation. The predicate to invalidate the safe >> iterators has been externalized. >> >> Ok to commit ? >> >> >> I like this version a lot - thanks for persisting with it. >> >> OK to commit, thanks. >> >> >> As an aside ... >> >> --- a/libstdc++-v3/testsuite/util/testsuite_abi.h >> +++ b/libstdc++-v3/testsuite/util/testsuite_abi.h >> @@ -24,7 +24,11 @@ >>  #include >>  #if __cplusplus >= 201103L >>  # include >> +# ifdef _GLIBCXX_DEBUG >> +namespace unord = std::_GLIBCXX_STD_C; >> +# else >>  namespace unord = std; >> +# endif >>  #else >>  # include >>  namespace unord = std::tr1; >> >> >> Several times I've been annoyed by the fact that we don't have a >> way to refer to std::_GLIBCXX_STD_C::vector etc. that is always >> valid, in normal mode and debug mode. >> >> Maybe we should add: >> >> namespace std { namespace _GLIBCXX_STD_C = ::std; } >> >> That way we can refer to std::_GLIBCXX_STD_C::foo in normal mode, >> and it will mean the same thing as in debug mode. So we don't >> need to use #if conditions like this. >> >> > Good idea, I'll prepare it. > > > Alternatively we could do this: > > namespace std > { > namespace __cxx1998 { } > #ifdef _GLIBCXX_DEBUG > namespace __cont = __cxx1998; > #else > namespace __cont = ::std:: > #endif > } > > And then define this so it's always the same name: > #define _GLIBCXX_STD_C __cont > > Then we can refer to std::_GLIBCXX_STD_C::vector in any context, and > it refers to the right thing. And we could also stop using the > SHOUTING macro, and just refer to std::__cont::vector instead. > > We could also make this work as std::__cxx1998::vector, but maybe we > should move away from the "1998" name, because it doesn't make much > sense for forward_list and unordered_map which are not in C++98. > Here is what I started. I use '__normal' because when greping '__cont' in the lib it reported me a definition of it in boost_concept_check.h. But now that I took a closer look in this file I realize that it is just where you pick the idea of the '__cont' ! So, what do you prefer ? __cont or __normal ? I was not considering to replace usage of _GLIBCXX_STD_C in the lib as long as there is no #ifdef _GLIBCXX_DEBUG. Do you prefer I do ? François --------------6B98F9C4F05BB9D73FCE1650 Content-Type: text/x-patch; charset=UTF-8; name="normal_ns.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="normal_ns.patch" diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 4b7fa659300..becd83af4d9 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -245,6 +245,7 @@ namespace __debug { } namespace __parallel { } namespace __cxx1998 { } + namespace __normal { } namespace __detail { namespace __variant { } // C++17 @@ -384,6 +385,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION # endif } + namespace __normal = __cxx1998; + _GLIBCXX_END_NAMESPACE_VERSION // Inline namespace for debug mode. @@ -407,6 +410,11 @@ _GLIBCXX_END_NAMESPACE_VERSION # warning currently using inlined namespace mode which may fail \ without inlining due to lack of weak symbols # endif +#else +namespace std +{ + namespace __normal = ::std; +} #endif // Macros for namespace scope. Either namespace std:: or the name diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc index dc2a2be3867..399064ea074 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc @@ -35,12 +35,7 @@ test01() fld.resize(0); VERIFY(fld.empty() == true); -#ifdef _GLIBCXX_DEBUG - using std::_GLIBCXX_STD_C::_Fwd_list_node; -#else - using std::_Fwd_list_node; -#endif - + using std::__normal::_Fwd_list_node; std::allocator<_Fwd_list_node > a; VERIFY( fld.max_size() == __gnu_test::max_size(a) ); } diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.h b/libstdc++-v3/testsuite/util/testsuite_abi.h index 4a0cf64f6fb..d0902db9193 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.h +++ b/libstdc++-v3/testsuite/util/testsuite_abi.h @@ -24,11 +24,7 @@ #include #if __cplusplus >= 201103L # include -# ifdef _GLIBCXX_DEBUG -namespace unord = std::_GLIBCXX_STD_C; -# else -namespace unord = std; -# endif +namespace unord = std::__normal; #else # include namespace unord = std::tr1; --------------6B98F9C4F05BB9D73FCE1650--