From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 28767385771A for ; Wed, 12 Apr 2023 15:09:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 28767385771A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=jguk.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=jguk.org Received: by mail-wm1-x330.google.com with SMTP id v20-20020a05600c471400b003ed8826253aso2528850wmo.0 for ; Wed, 12 Apr 2023 08:09:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jguk.org; s=google; t=1681312191; x=1683904191; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=HTisrzmlEfbcLSyT9joCjBr0ZFVr4pe2Hf4GaSYVtWM=; b=cMhOfdxOBg6dnAj+v/8NIioREJcVxdj6gVTjbGQrZuhbs7+MARKIRRBdW8SsvNNdJt DfVuBV6B4nKyYSEtB7e0lJrSa4SscbLm5QY5ARO+zdcjIbiZOaqMh5+R+v3jjpRBYb84 cglzcfqp2zY3ecAZQFNWH2/BhdtuTl2cG6TwADH9fbSFHKGGQRp7d0swHzlQkKHqq0SQ PReONY2cXwbfpjpUkAiVYx0QwE9+X2f/kejNL02YFqcMIsMeI0ls6iqOrQdeAZdllhhF +Q4OZb1KXMQUTlTHy4mxkfSpaVraMsEIPpQEgeyHo6RpkmJsYQuJGCFbFVUNRgn087jT y02g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1681312191; x=1683904191; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HTisrzmlEfbcLSyT9joCjBr0ZFVr4pe2Hf4GaSYVtWM=; b=t0zTWHlyt9Qh5PAFNfyKbnAPF0tNqYpMLeskZhqoKRxsCFUKHICFdtoLEhBKPswqow j/PnDARqpP5/T2Lc3naJVRNep79XqQ0dLF6xIckFVj+8UEv3Jl/DrWtBwtTb06ObPjZR dSWdTCTamiim23O8lrGtql8SRpfoa92wD6n+z9lDunotPJSeRy4VcM3e7skiDdfsYN0n uN9oL/qOQXpn55XTRZx+vXuChtvVd00KalLkbzs+aKciebydr0Dn9JP/4mTBGMZX2LYE F5CTvrbCX1mNAVkwZRo5ZZjAllsITc/TopErwgU5PpMs3Rn4MsPIiRGlUi1YXOfzYEQV 3sHA== X-Gm-Message-State: AAQBX9cL4Huz95PqCr7nDVQstJjiAhb1SLlp1Y4dSYcMXVqZkUisAZLV XTHmmEeFz+aVaYLJ5nW0/rwjfw== X-Google-Smtp-Source: AKy350ZZ1L+8/q9p0ct1/2we7KHEoU33t8Iq82J//tM5VW4QeP1AAKIWPXvZy5+psw5Bo7Skfopqqw== X-Received: by 2002:a1c:f70c:0:b0:3ee:4dc0:d4f2 with SMTP id v12-20020a1cf70c000000b003ee4dc0d4f2mr4478686wmh.41.1681312190760; Wed, 12 Apr 2023 08:09:50 -0700 (PDT) Received: from [192.168.0.12] (cpc87345-slou4-2-0-cust172.17-4.cable.virginm.net. [81.101.252.173]) by smtp.gmail.com with ESMTPSA id j11-20020a05600c190b00b003f09c34fa4csm2765074wmq.40.2023.04.12.08.09.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Apr 2023 08:09:50 -0700 (PDT) Message-ID: <1b8d08b9-cef0-e828-7bf3-77f71167b66d@jguk.org> Date: Wed, 12 Apr 2023 16:09:49 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Subject: Re: libstdc++ Chapter 28. Demangling example Content-Language: en-GB To: Jonathan Wakely Cc: libstdc++@gcc.gnu.org References: <03e9c7d6-95a0-bd2e-fa31-91919ad76f3f@jguk.org> <66cc512c-f341-eda5-4e9a-8066f59e829f@jguk.org> From: Jonny Grant In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham 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 04/04/2023 12:26, Jonathan Wakely wrote: > On Fri, 31 Mar 2023 at 21:38, Jonny Grant wrote: >> >> >> >> On 31/03/2023 17:18, Jonathan Wakely wrote: >>> On Fri, 31 Mar 2023 at 16:24, Jonny Grant wrote: >>>> >>>> Hello >>>> >>>> I tried out this code. Maybe I'm doing something wrong? >>>> >>>> https://godbolt.org/z/Y78h4f1W6 >>>> >>>> https://gcc.gnu.org/onlinedocs/gcc-12.2.0/libstdc++/manual/manual/ext_demangling.html >>>> >>>> However only get reduced output after status -2 is returned: >>>> >>>> std::bad_exception => >>>> >>>> Looks like std::cout gets broken by the nullptr realname (that's a frustration). So I put an if(realname) in the godbolt link above. >>> >>> N.B. passing a null pointer to printf("%s", ptr) is undefined. >>> Printing "(null)" is not required by the standards. >>> >>> Anyway, the exception classes haven't printed their mangled name for >>> many many years, if they ever did. Only the second part of the >>> example, using typeid, is valid. >> >> Ok I see. Is it better that the std::bad_exception part of the example is removed? > > Yes, done for GCC 13. Great! >> >> c++filt doesn't demangle St13bad_exception either. > > c++filt needs the _Z prefix that identifies a mangled C++ name. The > __cxa_demangle function doesn't need that. > > $ c++filt St13bad_exception > St13bad_exception > $ c++filt _ZSt13bad_exception > std::bad_exception Ok that makes sense. >>>> Maybe it's also a good time to update the example abi::__cxa_demangle call from those 0 parameters to be NULL? >>> >>> Maybe nullptr. >> >> ok > > I didn't change them, using 0 as a null pointer constant seems OK. Isn't nullptr, or at least NULL better? NULL has always been used in C++ code, I've seldom seen 0 used professionally. abi::__cxa_demangle(ti.name(), nullptr, nullptr, &status); I did wonder, has anyone thought of introducing a C++ wrapper that outputs a std::string with the demangled name? That would avoid the caller needing to free the pointer. eg something like this, or similar. int abi::__cxa_demangle_string(const std::string mangled_name, std::string & output_string); >> >> I noticed in libstdc++-v3/libsupc++/cxxabi.h >> >> * @note The same demangling functionality is available via >> * libiberty (@c and @c libiberty.a) in GCC >> * 3.1 and later, but that requires explicit installation (@c >> * --enable-install-libiberty) and uses a different API, although >> * the ABI is unchanged. >> >> This refers to GCC 3.1 from 2002, is it safe enough to now remove that GCC 3.1 comment? > > It's still true, I don't see any need to remove it. True, but is stating the GCC version that demangling functionality was available via enabling libiberty relevant when someone is reading the latest version GCC 13 release? I can't think I need to know this was added in GCC 3.1 there must be countless things that aren't directly documented that have been introduced. Jonny