From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by sourceware.org (Postfix) with ESMTPS id D7F2F3858412; Mon, 16 Jan 2023 17:47:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D7F2F3858412 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wm1-x32c.google.com with SMTP id j34-20020a05600c1c2200b003da1b054057so8434907wms.5; Mon, 16 Jan 2023 09:47:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:subject:from:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=G3XLbGukSG6w251QQ8ViIV10G668AuXTH2abmQhwUGk=; b=ezCOGwsNsaykpr4AcF78j0vRMMGKWo8Vr0g7gD+7DRip5XR/CAx+mEapgFwmzLEtJt 6pecEfIMqnnxvUR6/q6mA8CH67wN+UogPJqRMN58FSUTk7tysloV9xC6VIs1iNJvU3Ad pcxsKFOBuZgvi5cWnDDSF3zUvAAfFxcdSxCt00F5KF+bhbQV7/l+7XSWsEQh2mxehEqy g23UBxlopm9odbOEwPoTvZ2LurbBFU039rmRHtEWRKWGHMtAnztqr6YM/NWM13pP4I0M vGMgC2V4maL1Xcinqv9N1TBnCOcd3nFdi48/eXs85TnO4uMmibQWMI/+LLcfXzc83lJj Ihrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:subject:from:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=G3XLbGukSG6w251QQ8ViIV10G668AuXTH2abmQhwUGk=; b=7SQFlS7EPbIdDQe9AQsvNLnhB0DbCNtGoEtjsdlXgcn3My84MIPGt9mJMIQAYAwRAg AFTGZfWhQhCWgYPcrlqyuhJHmma3nk5KzD/gATef+WkbTCzHrY082rwY14NY0J7Hgg28 BaHxEZmySjMMPuKa+FB0tjX7a8zC37FkJ58dvlB5ZrykNRzvMfUOoC57yBuO+eE704nm dx6vBXAT6OD1wX7BPsS2xI1p4+WsyRkCsOTASPYKeDOc9tRMdOi4WROKerUUIXimNjW5 nlakx3IqsSH5g2JSpZJHWlVZvrfo32O7BVAuUwLtq+iqc9fYbFvA4X4RMaJ8/niBFMnU DWGA== X-Gm-Message-State: AFqh2korhV9HHKSspC9II33CgrcZvarDbMghLa4dXsNRx0WsnAXDWOXm KKXOuYfuFJ+N0+U0Xr0ygNU= X-Google-Smtp-Source: AMrXdXu8jtkigi+Q+u5TX4lCtjmhFO88kEDXFxZ2VhJ3aUeVTtxdFKysp+sx9qPHVKiljR3Ty4V6aA== X-Received: by 2002:a05:600c:181c:b0:3da:f9e9:3a1a with SMTP id n28-20020a05600c181c00b003daf9e93a1amr316888wmp.20.1673891240317; Mon, 16 Jan 2023 09:47:20 -0800 (PST) Received: from [10.5.1.164] ([109.190.253.14]) by smtp.googlemail.com with ESMTPSA id hg9-20020a05600c538900b003cfa622a18asm38223348wmb.3.2023.01.16.09.47.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 16 Jan 2023 09:47:19 -0800 (PST) Message-ID: <68e30b25-2a7c-b9dd-3855-f98ddd86b022@gmail.com> Date: Mon, 16 Jan 2023 18:47:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Subject: Re: [PATCH] Use cxx11 abi in versioned namespace To: Jonathan Wakely Cc: "libstdc++@gcc.gnu.org" , gcc-patches References: <2d387cf7-8b99-3f04-6b99-d9dab5309693@gmail.com> <66ebb430-e280-3501-1f20-aab66f6f4d7b@gmail.com> <98eeb943-9f1d-72b6-4ce1-cb2a802550f7@gmail.com> Content-Language: fr In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=no 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 13/01/23 17:33, Jonathan Wakely wrote: > On Mon, 5 Dec 2022 at 21:14, François Dumont via Libstdc++ > wrote: >> I just rebased this patch. >> >> All good apart from the to_chars/from_chars symbols issue. >> >> François >> >> >> On 11/10/22 19:28, François Dumont wrote: >>> Hi >>> >>> Now that pretty printer is fixed (once patch validated) I'd like >>> to propose this patch again. >>> >>> Note that I'am adding a check on pretty printer with a std::any on >>> a std::wstring. I did so because of the FIXME in printers.py which is >>> dealing with 'std::string' explicitely. Looks like in my case, where >>> there is no 'std::string' but just a 'std::__8::string' we do not need >>> the workaround. >>> >>> Once again I am attaching also the version namespace bump patch as >>> I think that adopting the cxx11 abi in this mode is a good enough >>> reason to bump it. If you agress let me know if I should squash the >>> commits before pushing. > Yes, I think this change would justify bumping the version. > >>> libstdc++: [_GLIBCXX_INLINE_VERSION] Use cxx11 abi >>> >>> Use cxx11 abi when activating versioned namespace mode. >>> >>> libstdcxx-v3/ChangeLog: >>> >>> * acinclude.m4 [GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI]: >>> Default to "new" libstdcxx abi. >>> * config/locale/dragonfly/monetary_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Define money_base >>> members. >>> * config/locale/generic/monetary_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>> * config/locale/gnu/monetary_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>> * config/locale/gnu/numeric_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI](__narrow_multibyte_chars): Define. >>> * configure: Regenerate. >>> * include/bits/c++config >>> [_GLIBCXX_INLINE_VERSION](_GLIBCXX_NAMESPACE_CXX11, >>> _GLIBCXX_BEGIN_NAMESPACE_CXX11): Define >>> empty. >>> [_GLIBCXX_INLINE_VERSION](_GLIBCXX_END_NAMESPACE_CXX11, >>> _GLIBCXX_DEFAULT_ABI_TAG): Likewise. >>> * python/libstdcxx/v6/printers.py >>> (StdStringPrinter::__init__): Set self.new_string to True >>> when std::__8::basic_string type is >>> found. >>> * src/Makefile.am >>> [ENABLE_SYMVERS_GNU_NAMESPACE](ldbl_alt128_compat_sources): Define empty. >>> * src/Makefile.in: Regenerate. >>> * src/c++11/Makefile.am (cxx11_abi_sources): Rename into... >>> (dual_abi_sources): ...this, new. Also move several >>> sources to... >>> (sources): ...this. >>> (extra_string_inst_sources): Move several sources to... >>> (inst_sources): ...this. > I don't understand this part. Moving those files to sources and > inst_sources will mean they are always compiled, right? But we don't > want them compiled for --disable-libstdcxx-dual-abi > > In those files you've changed the #if conditions so they are empty if > the dual ABI is disabled, but why do they need to be compiled at all? > This isn't clear from the patch or the description or the changelog. --disable-libstdcxx-dual-abi means use cow string implementation. With this patch I am introducing somehow another disable-dual-abi mode but this time to use cxx11 string implementation. At Makefile.am level it was difficult to match both cases so I'm doing it at compilation time with most of time the condition: #if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI I'll make it clearer at ChangeLog level. >>> * src/c++11/Makefile.in: Regenerate. >>> * src/c++11/cow-fstream-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> * src/c++11/cow-locale_init.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> * src/c++11/cow-sstream-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> * src/c++11/cow-stdexcept.cc >>> [_GLIBCXX_USE_CXX11_ABI](error_category::_M_message): >>> Skip definition. >>> [_GLIBCXX_USE_CXX11_ABI]: Skip Transaction Memory TS >>> definitions. >>> * src/c++11/cow-string-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> * src/c++11/cow-string-io-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> * src/c++11/cow-wstring-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> * src/c++11/cow-wstring-io-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> * src/c++11/cxx11-hash_tr1.cc [!_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> * src/c++11/cxx11-ios_failure.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> [!_GLIBCXX_USE_DUAL_ABI] (__ios_failure): Remove. > For this file I think your changes make sense, because the definitions > of the gcc4-compatible and cxx11 ABI are different, we're not just > compiling it twice. > > >>> * src/c++11/cxx11-locale-inst.cc: Cleanup, just include >>> locale-inst.cc. >>> * src/c++11/cxx11-stdexcept.cc [!_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>> [!_GLIBCXX_USE_DUAL_ABI](__cow_string): Remove. >>> * src/c++11/cxx11-wlocale-inst.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> * src/c++11/fstream-inst.cc [!_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions >>> * src/c++11/locale-inst-numeric.h >>> [!_GLIBCXX_USE_DUAL_ABI](std::use_facet>, >>> std::use_facet>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](std::has_facet>, >>> std::has_facet>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](std::num_get>> istreambuf_iterator>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](std::num_put>> ostreambuf_iterator>): Instantiate. >>> * src/c++11/locale-inst.cc [!_GLIBCXX_USE_DUAL_ABI]: Build >>> only when configured >>> _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. >>> [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__numpunct_cache): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__timepunct): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__timepunct_cache): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](time_put>> ostreambuf_iterator>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](time_put_byname>> ostreambuf_iterator>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__ctype_abstract_base): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](ctype_byname): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__codecvt_abstract_base>> mbstate_t>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname>> mbstate_t>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet>> mbstate_t>>(const locale&)): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet<__timepunct>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet>> mbstate_t>>(const locale&)): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet<__timepunct>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__add_grouping): Define. >>> [!_GLIBCXX_USE_DUAL_ABI](__pad>): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long, >>> const C*, ios_base::fmtflags, bool)): >>> Define. >>> [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long >>> long, const C*, ios_base::fmtflags, bool)): >>> Define. >>> * src/c++11/cxx11-wlocale-inst.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> * src/c++98/Makefile.am (cxx11_abi_sources): Remove, >>> unique cow-istream-string.cc entry move to... >>> (inst_sources): ...this. > Why? > >>> * src/c++98/Makefile.in: Regenerate. >>> * src/c++98/cow-istream-string.cc: Include >>> . >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. > This file doesn't need to be compiled when the dual abi is disabled. It depends if it is disabled because of --disable-libstdcxx-dual-abi or because of --enable-symvers=gnu-versioned-namespace. >>> * src/c++98/hash_tr1.cc [_GLIBCXX_USE_CXX11_ABI]: Skip >>> definitions. >>> * src/c++98/ios_failure.cc >>> [_GLIBCXX_USE_CXX11_ABI][_GLIBCXX_USE_DUAL_ABI]: Skip definitions. >>> * src/c++98/istream-string.cc [!_GLIBCXX_USE_DUAL_ABI]: >>> Build only when configured >>> _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. >>> * src/c++98/locale_facets.cc >>> [_GLIBCXX_USE_CXX11_ABI](__verify_grouping): Remove. >>> * src/c++98/stdexcept.cc >>> [_GLIBCXX_USE_CXX11_ABI](logic_error(const string&): Remove. >>> [_GLIBCXX_USE_CXX11_ABI](domain_error(const string&): Remove. >>> [_GLIBCXX_USE_CXX11_ABI](invalid_argument(const string&): >>> Remove. >>> [_GLIBCXX_USE_CXX11_ABI](length_error(const string&): Remove. >>> [_GLIBCXX_USE_CXX11_ABI](out_of_range(const string&): Remove. >>> [_GLIBCXX_USE_CXX11_ABI](runtime_error(const string&): >>> Remove. >>> [_GLIBCXX_USE_CXX11_ABI](range_error(const string&): Remove. >>> [_GLIBCXX_USE_CXX11_ABI](overflow_error(const string&): >>> Remove. >>> [_GLIBCXX_USE_CXX11_ABI](underflow_error(const string&): >>> Remove. >>> * testsuite/libstdc++-prettyprinters/cxx17.cc: Add >>> std::any check with std::wstring. >>> >>> François >>> >>> On 30/05/22 22:58, François Dumont wrote: >>>> Hi >>>> >>>> Here is the patch to use cxx11 abi for the versioned namespace mode. >>>> >>>> It is still suffering from a side effect on gdb pretty printers with >>>> 3 errors like: >>>> >>>> got: type = >>>> std::unique_ptr>>> std::__8::char_traits, std::__8::allocator >>[]>>[99]> >>>> FAIL: libstdc++-prettyprinters/80276.cc whatis p4 >>>> >>>> However once I apply the version bump errors are gone. >>>> >>>> Let me know if it is ok to apply all at once or if you prefer to >>>> avoid the version bump. >>>> >>>> François