From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x729.google.com (mail-qk1-x729.google.com [IPv6:2607:f8b0:4864:20::729]) by sourceware.org (Postfix) with ESMTPS id 154223858C50 for ; Tue, 18 Oct 2022 14:17:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 154223858C50 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-qk1-x729.google.com with SMTP id x13so8674833qkg.11 for ; Tue, 18 Oct 2022 07:17:30 -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=wO6ayVqEKr3i++dDOiJ3QroNCcKOTvDuEks5nlfggMA=; b=Gl/Xzpbk47Ahpo79HLB2kpTD0tcwCfy2tVbUZ9zQEyyHy+88+KaAF2szYhbfi6T61j Vv7kSOSRbP/ar8kToKL67IKEG+noGjIRylkwt1NtW2UOIQBcQV4BxjqleyeB+EXaiPiM 3Zm5miEzS9lRTivqcdUuyPgnfJFgbygW3mIGoGqWEtN9Mfs/BMW9VLvVCueBQ53gArab sNouTNO6dks79ubbiAzGDtWpchC+EwRHRYpVMG/kEeDNAsDhOUPxq38tB3+SjnayTOme 01S87R2QDRSMIQNivrcHOOzyBkofAh4NfJbwWdXH4IpzGeCrr58ANtH2nwz3+qHkh/03 84nA== 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=wO6ayVqEKr3i++dDOiJ3QroNCcKOTvDuEks5nlfggMA=; b=Qt2nfWpQnW5lxns43qZ271TorTgPAmbcMDZwD98XMOLcBLUWSX00Qp3RYRLvLysWPj LHyW6iSEzdQpoSyjW9xKR6Lc2d+gIakF3zYoofLksQyYpVvFOVYap6ZpGsRiqXk2W+qI /s2qhbrjyh+j8n6QxMKk+pppaZ86bUKExZ4Ap8SD9SpRGAVA8cg2bavvz7DcKyaDZOV0 DSZ5Ml6HqLFEvzG6cpHHe1G5ZXKdp0mx06f2VpWe6+ohLvYeATW0T7lvymCptz4JN8vG 1W0+svYqvwAHxs9yh9GyCLKJT2hYZbRkbRkSb9QvcR4Qx+npNg/wDsZxE//iAS5hyyqJ Fs4Q== X-Gm-Message-State: ACrzQf3LOkcqiAkcUKU8tzoSD/vebkXRUZKUHzMtzQhQYnUylzeNw8a3 bLfogwXfsZPy9ZBbK0x0SJVUnBZDjQ8= X-Google-Smtp-Source: AMsMyM482Cg+W4y6KTz1XChPZPAN6wOmiJoy+lvXTaut2WgqWmKNqWOcBz4cRUrnso0rKXEg0Iec2Q== X-Received: by 2002:a05:620a:31a5:b0:6ee:b0c2:f54 with SMTP id bi37-20020a05620a31a500b006eeb0c20f54mr1967344qkb.69.1666102649281; Tue, 18 Oct 2022 07:17:29 -0700 (PDT) Received: from ?IPV6:2620:10d:c0a8:11d1::1095? ([2620:10d:c091:480::8f38]) by smtp.googlemail.com with ESMTPSA id x12-20020a05620a448c00b006ec5238eb97sm2494837qkp.83.2022.10.18.07.17.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Oct 2022 07:17:28 -0700 (PDT) Sender: Nathan Sidwell Message-ID: <33b95d46-dec3-956e-8f43-41530abff7ed@acm.org> Date: Tue, 18 Oct 2022 10:17:27 -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: stream non-trailing default targs [PR105045] Content-Language: en-US To: Patrick Palka , gcc-patches@gcc.gnu.org Cc: jason@redhat.com References: <20221018141310.3139378-1-ppalka@redhat.com> From: Nathan Sidwell In-Reply-To: <20221018141310.3139378-1-ppalka@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3038.7 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/18/22 10:13, Patrick Palka wrote: > This fixes the below testcase in which we neglect to stream the default > argument for T only because the subsequent parameter U doesn't also have > a default argument. ok > > Tested on x86_64-pc-linux-gnu, does this look OK for trunk? > > PR c++/105045 > > gcc/cp/ChangeLog: > > * module.cc (trees_out::tpl_parms_fini): Don't assume default > template arguments are all trailing. > (trees_in::tpl_parms_fini): Likewise. > > gcc/testsuite/ChangeLog: > > * g++.dg/modules/pr105045_a.C: New test. > * g++.dg/modules/pr105045_b.C: New test. > --- > gcc/cp/module.cc | 20 ++++++-------------- > gcc/testsuite/g++.dg/modules/pr105045_a.C | 7 +++++++ > gcc/testsuite/g++.dg/modules/pr105045_b.C | 6 ++++++ > 3 files changed, 19 insertions(+), 14 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/modules/pr105045_a.C > create mode 100644 gcc/testsuite/g++.dg/modules/pr105045_b.C > > diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc > index 999ff3faafc..2c2f9a9a8cb 100644 > --- a/gcc/cp/module.cc > +++ b/gcc/cp/module.cc > @@ -10034,15 +10034,11 @@ trees_out::tpl_parms_fini (tree tmpl, unsigned tpl_levels) > tree vec = TREE_VALUE (parms); > > tree_node (TREE_TYPE (vec)); > - tree dflt = error_mark_node; > for (unsigned ix = TREE_VEC_LENGTH (vec); ix--;) > { > tree parm = TREE_VEC_ELT (vec, ix); > - if (dflt) > - { > - dflt = TREE_PURPOSE (parm); > - tree_node (dflt); > - } > + tree dflt = TREE_PURPOSE (parm); > + tree_node (dflt); > > if (streaming_p ()) > { > @@ -10072,19 +10068,15 @@ trees_in::tpl_parms_fini (tree tmpl, unsigned tpl_levels) > tpl_levels--; parms = TREE_CHAIN (parms)) > { > tree vec = TREE_VALUE (parms); > - tree dflt = error_mark_node; > > TREE_TYPE (vec) = tree_node (); > for (unsigned ix = TREE_VEC_LENGTH (vec); ix--;) > { > tree parm = TREE_VEC_ELT (vec, ix); > - if (dflt) > - { > - dflt = tree_node (); > - if (get_overrun ()) > - return false; > - TREE_PURPOSE (parm) = dflt; > - } > + tree dflt = tree_node (); > + if (get_overrun ()) > + return false; > + TREE_PURPOSE (parm) = dflt; > > tree decl = TREE_VALUE (parm); > if (TREE_CODE (decl) == TEMPLATE_DECL) > diff --git a/gcc/testsuite/g++.dg/modules/pr105045_a.C b/gcc/testsuite/g++.dg/modules/pr105045_a.C > new file mode 100644 > index 00000000000..597f9294185 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/modules/pr105045_a.C > @@ -0,0 +1,7 @@ > +// PR c++/105045 > +// { dg-additional-options -fmodules-ts } > +// { dg-module-cmi pr105045 } > + > +export module pr105045; > + > +export template void f(U) { } > diff --git a/gcc/testsuite/g++.dg/modules/pr105045_b.C b/gcc/testsuite/g++.dg/modules/pr105045_b.C > new file mode 100644 > index 00000000000..77c94d4c473 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/modules/pr105045_b.C > @@ -0,0 +1,6 @@ > +// PR c++/105045 > +// { dg-additional-options -fmodules-ts } > + > +import pr105045; > + > +int main() { f(0); } -- Nathan Sidwell