From patchwork Thu Feb 17 22:50:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 51197 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 399F6385AC19 for ; Thu, 17 Feb 2022 22:51:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 399F6385AC19 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1645138312; bh=kWWpnZDHCOUncuQg0ZLlOGZaEFyTSp75DVAY/kCfU6o=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=KGNqLd9gm616paHW8nrJJjvm5XwkcdapyIVrqZCyylHce7OqLctrVF80AqADYnDYA BufAIihIms4TQ7MgliRszvk7sExAPmMJ496SB+2vz76YGTuzQ/IRco2PiNmRpnMgeI K3eKak+DVRWArbyXBiRXQwLPBq6aXLaCAS8JC7uk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org 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 3E253385B829 for ; Thu, 17 Feb 2022 22:50:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3E253385B829 Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-528-rpp8dNt-NJuVNLMJMvEjfQ-1; Thu, 17 Feb 2022 17:50:55 -0500 X-MC-Unique: rpp8dNt-NJuVNLMJMvEjfQ-1 Received: by mail-qk1-f200.google.com with SMTP id q5-20020ae9dc05000000b00507225deac5so5557193qkf.5 for ; Thu, 17 Feb 2022 14:50:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=kWWpnZDHCOUncuQg0ZLlOGZaEFyTSp75DVAY/kCfU6o=; b=17cp4IEsw5Re5uDyRFiHzMuwE6r1o7SlNuoleKJ1yyOJNH+nldnChUSvBO1ZgAaLcL tBQTnCRaqgCCJSGbMsW3nJsHDk0kchSJJ++VuDTRf3p5qSZP7WyX6KJ4ftBlbkUSZN2C 3rL5DewZYvMkJIGvr2b6ox5YSxV4xN3pjiAwjOA++1qeDAdjqMHqTNof2OnomjC1urFx 7WxVrfgNz6dGzvXnNqI0CzX5o1ejAHXGUgHMEw4pA+AukEly2AXqYeB9KTf+dIK6QIlo q62g88PdJEM0fWLgxqvc/QV857YDM4gO4FKclPE4jCnUqe54ttT0gXnOyPGs9u+IE4k0 yE7g== X-Gm-Message-State: AOAM533aPzHuxnuEJ9Cdg0lO5O2KMCJZCGHaMPXI1+QuMty4H09bP05G tW2PisDLvGPES1Ck3LV7vXQm6wSkNFMxWYZyxJgrqMm0hKWzqF4Ssn0zbDLu7vpzzkO5/rC5tZS eqAZ2Gv2ZjDLnGStjV8J3ozDyUSiK0PYlKDkemRRzNRUJbiSfO2rVX4LsLDItCZ2xWg== X-Received: by 2002:ad4:5685:0:b0:42c:b205:3a2a with SMTP id bc5-20020ad45685000000b0042cb2053a2amr3920823qvb.31.1645138254354; Thu, 17 Feb 2022 14:50:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJyLvAbOMhXe+3N3hcMQKPK/mCnEpMT0CmqUdjq2iWbPR+wiiLE6OHYSH/qFC/oYYB2I1rUdcw== X-Received: by 2002:ad4:5685:0:b0:42c:b205:3a2a with SMTP id bc5-20020ad45685000000b0042cb2053a2amr3920812qvb.31.1645138253955; Thu, 17 Feb 2022 14:50:53 -0800 (PST) Received: from barrymore.redhat.com (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id g8sm4470862qto.53.2022.02.17.14.50.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Feb 2022 14:50:53 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: inlining explicit instantiations [PR104539] Date: Thu, 17 Feb 2022 17:50:51 -0500 Message-Id: <20220217225051.2133964-1-jason@redhat.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.1 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_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The PR10968 fix cleared DECL_COMDAT to force output of explicit instantiations. Then the PR59469 fix added a call to mark_needed, after which we no longer need to clear DECL_COMDAT, and leaving it set allows us to inline explicit instantiations without worrying about symbol interposition. I suppose there's an argument to be made that an explicit instantiation declaration (extern template) should clear DECL_COMDAT, since that suggests that there will be only a single instantiation somewhere that could be subject to interposition, but that doesn't change the 'inline' semantics, and it seems cleaner to treat template instantiations uniformly. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/104539 gcc/cp/ChangeLog: * pt.cc (mark_decl_instantiated): Don't clear DECL_COMDAT. gcc/testsuite/ChangeLog: * g++.dg/ipa/inline-4.C: New test. --- gcc/cp/pt.cc | 3 --- gcc/testsuite/g++.dg/ipa/inline-4.C | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ipa/inline-4.C base-commit: c352ef0ed90cfc07d494dfec111121bc683e337b diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index d4a40d517d1..352cff944d0 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -24726,9 +24726,6 @@ mark_decl_instantiated (tree result, int extern_p) set correctly by tsubst. */ TREE_PUBLIC (result) = 1; - /* This might have been set by an earlier implicit instantiation. */ - DECL_COMDAT (result) = 0; - if (extern_p) { DECL_EXTERNAL (result) = 1; diff --git a/gcc/testsuite/g++.dg/ipa/inline-4.C b/gcc/testsuite/g++.dg/ipa/inline-4.C new file mode 100644 index 00000000000..204aa7a366e --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/inline-4.C @@ -0,0 +1,15 @@ +// PR c++/104539 +// { dg-additional-options "-O3 -fdump-ipa-inline" } +// { dg-final { scan-ipa-dump-not "overwritten at link time" "inline" } } + +template +//inline +int f() { + return 0; +} + +template int f<0>(); + +int g() { + return f<0>() + 1; +}