From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf2f.google.com (mail-qv1-xf2f.google.com [IPv6:2607:f8b0:4864:20::f2f]) by sourceware.org (Postfix) with ESMTPS id 7A788385828A for ; Fri, 7 Oct 2022 11:23:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7A788385828A Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=acm.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-qv1-xf2f.google.com with SMTP id z18so2874221qvn.6 for ; Fri, 07 Oct 2022 04:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=nS9hOKG2mjHVRAjx/NFlSgQOcCC2IoJr1Oc+8PfOaDc=; b=E+ayB4OlKPNRPIMBUmAvaEnzXECmRIi9Axwo1s+eATXcfHB9kiSaTHX1o4LT4spMxV t1btr8dImLbXCoKSKCHHHRbTR+GhN9lgYUCD/yDkDN7gD95wgNPiItcm6uCFueBOfF3l mc9e1U67snhO8PIBCoe83fT49ZjNxy9Oj2WESIflEH3MScrEvI0dVjEQtx9QiSt+1MjW Zow59UNeExrEQ93UzvKMGT4TH8wZSLSDVmOop1HIg9xobSO/KPnubpzcH+7MIQAMc79n 9IN3LEP7BdvFxOk77yIxV+DF5YZ8pZHdInP1RY3GUWsX6p95WJqVl7I+PlNYXv4qYM6I iDzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nS9hOKG2mjHVRAjx/NFlSgQOcCC2IoJr1Oc+8PfOaDc=; b=Q7QlHr/P5VJIBxv6/t/luiKMMkdK3iG85IiBFPZAcHtKepFLBqFCITzmbvgfa+Hdek Isj7wasmY8KPZqJDHDJuPIVK02EsjdDMgNGo0l8mBWUl61v2J4Mp7/rRFLWR2VzLN3AW QjG447/B1oeMWb8VbsE3Onkmj+nWk8pnuUyNKrIJq/E4rT6mqE5cUG0H6ijTu9114liu D+pWZ/AALAGx0tmNpfbKl/73ouOVOHo3PYBSRgQnCYNEo4qg1Tixr7Q+PJmXWbUNDpvK PODM1EgRsWrI+cXd5tZtzRSH+/gFgC8bmOWkUD0XycpsLnbD4uf31Xef1RFqEqhFCSoI dYFQ== X-Gm-Message-State: ACrzQf17YpWM10AnsEGx7+4d37/lgPtyARETJLL00c8/Tk41tDvPjH2w Qed+c0eSx1KAYLUd/o2uwIs= X-Google-Smtp-Source: AMsMyM6cNI6MmgvhwWOqqYxxQXqmhf+2yVEUsdVe+C7TpYN1N0GOoLSy/n87g3ykMBvbyBnLwnGwpQ== X-Received: by 2002:a05:6214:ace:b0:4b1:af67:e2cb with SMTP id g14-20020a0562140ace00b004b1af67e2cbmr3502725qvi.32.1665141814566; Fri, 07 Oct 2022 04:23:34 -0700 (PDT) Received: from ?IPV6:2620:10d:c0a3:1407:942e:c420:cf80:2f69? ([2620:10d:c091:500::6:7323]) by smtp.googlemail.com with ESMTPSA id v16-20020a05620a441000b006e8f8ca8287sm921223qkp.120.2022.10.07.04.23.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 07 Oct 2022 04:23:34 -0700 (PDT) Sender: Nathan Sidwell Message-ID: <28d94bfb-5c22-f7e1-f479-1daf9d0748da@acm.org> Date: Fri, 7 Oct 2022 07:23:33 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Subject: Re: [PATCH] c++ modules: static var in inline function [PR104433] Content-Language: en-US To: Patrick Palka , gcc-patches@gcc.gnu.org Cc: jason@redhat.com References: <20221006161916.4118820-1-ppalka@redhat.com> From: Nathan Sidwell In-Reply-To: <20221006161916.4118820-1-ppalka@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3040.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,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 10/6/22 12:19, Patrick Palka wrote: > The below testcase fails to link with the error > > undefined reference to `f()::y' > > ultimately because during stream out for the static VAR_DECL y we > override DECL_EXTERNAL to true, which later during IPA confuses > symbol_table::remove_unreachable_nodes into thinking it's safe > to not emit the symbol. > > The streaming code in question already avoids overriding DECL_EXTERNAL > here for DECL_VAR_DECLARED_INLINE_P vars, so it seems natural to do the > same for static vars from an DECL_DECLARED_INLINE_P function scope. > > After this patch (and r13-3134-g09df0d8b14dda6), the following now > links: > > import ; > int main() { std::make_shared(); } > > Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for > trunk? yeah, that's correct -- these are just as inline > > PR c++/104433 > > gcc/cp/ChangeLog: > > * module.cc (trees_out::core_bools): Don't override > DECL_EXTERNAL to true for static variables from an inline > function. > > gcc/testsuite/ChangeLog: > > * g++.dg/modules/static-2_a.H: New test. > * g++.dg/modules/static-2_b.C: New test. > --- > gcc/cp/module.cc | 3 +++ > gcc/testsuite/g++.dg/modules/static-2_a.H | 8 ++++++++ > gcc/testsuite/g++.dg/modules/static-2_b.C | 9 +++++++++ > 3 files changed, 20 insertions(+) > create mode 100644 gcc/testsuite/g++.dg/modules/static-2_a.H > create mode 100644 gcc/testsuite/g++.dg/modules/static-2_b.C > > diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc > index 79cbb346ffa..11f68794cd2 100644 > --- a/gcc/cp/module.cc > +++ b/gcc/cp/module.cc > @@ -5397,6 +5397,9 @@ trees_out::core_bools (tree t) > > case VAR_DECL: > if (TREE_PUBLIC (t) > + && !(TREE_STATIC (t) > + && DECL_FUNCTION_SCOPE_P (t) > + && DECL_DECLARED_INLINE_P (DECL_CONTEXT (t))) > && !DECL_VAR_DECLARED_INLINE_P (t)) > is_external = true; > break; > diff --git a/gcc/testsuite/g++.dg/modules/static-2_a.H b/gcc/testsuite/g++.dg/modules/static-2_a.H > new file mode 100644 > index 00000000000..b4546932a12 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/modules/static-2_a.H > @@ -0,0 +1,8 @@ > +// PR c++/104433 > +// { dg-additional-options -fmodule-header } > +// { dg-module-cmi {} } > + > +inline int* f() { > + static int y = 0; > + return &y; > +} > diff --git a/gcc/testsuite/g++.dg/modules/static-2_b.C b/gcc/testsuite/g++.dg/modules/static-2_b.C > new file mode 100644 > index 00000000000..bfd35b0fc15 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/modules/static-2_b.C > @@ -0,0 +1,9 @@ > +// PR c++/104433 > +// { dg-additional-options -fmodules-ts } > +// { dg-do link } > + > +import "static-2_a.H"; > + > +int main() { > + f(); > +} -- Nathan Sidwell