From patchwork Thu Dec 15 00:01:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 33438 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp37124wrn; Wed, 14 Dec 2022 16:02:49 -0800 (PST) X-Google-Smtp-Source: AA0mqf6s2e7d1tP6LYcJrEDq6F9GeEbXK9NmTSE69mZlA7r+BnevYm8cFLQS4oVvaiDeNOWzQpd4 X-Received: by 2002:a17:906:8ce:b0:7ad:dd10:c614 with SMTP id o14-20020a17090608ce00b007addd10c614mr21298792eje.44.1671062569868; Wed, 14 Dec 2022 16:02:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671062569; cv=none; d=google.com; s=arc-20160816; b=LrA1GgHbkf7y6YPCO9lxF4tnK2EEN2AkduBv1IHGtSA7kFRMeUsjlY1XMGhAxvYXuZ OoYMZuIZkp41QAYX6ZLk2lIWUw1Zy7JKP5RwU9PniAEOlDFSowYoPk6AQeIxl0Z07zeO zACd43p7LYlUVmEHO5lZPONr3I4AkIyxon5r3bbId2wU3IOYk3BIoUDzhPjANyIsh637 4q4nEzQUJzhYQAtkk7Bl/McFwtr6U/cJHhp9s+K5eXgCGtB7+AF2W98CQTaU7n3mEaqx 6j1G1NUXqHFYqGeUvHYmIdncTPHMovRhuARXAhIJzLEV8s1ohT+3DWlHy4iCNzEl1uTV jV7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=oBR7UG3xPatWhDZJhkIdUlB2JeqC9+TlfwE9VGr8I0w=; b=McVB6DrLKBiwMN0YCNVBx0qJTzsi6hbkDWI5S9xxwY9QwnsD5RAb3+lYjlQGUegErh vtdqiAGiN8uQ1QFgEXcEuk+znTmXAWCr3Sxuug/laBHf73CW5Xqsi6hNZSZTXTl17g0k SeYjA7Xx+t+LVkLXVLWHSPyFeE9UVF/PfYbHJIGuE18CQXK8+pOjiTT5tnyXoVcq8N8G 7/UcNDCuyQxLSnsjqe6r2VGbz7Iksw5Kq4J6HcI4N1a+wLHF77NESAwd1JH/HqTM0ObE XZ0Fc6/wgQ2VW7JJzHwL9jzriu0X+1FTx5gWOcsqCS1QTcjeusP17HyVL7R81uDRAFcj k72A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=nMqbCWR1; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id f27-20020a50a6db000000b0045a1dbedd92si13117697edc.35.2022.12.14.16.02.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 16:02:49 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=nMqbCWR1; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 65E51383C7FF for ; Thu, 15 Dec 2022 00:02:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 65E51383C7FF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1671062568; bh=oBR7UG3xPatWhDZJhkIdUlB2JeqC9+TlfwE9VGr8I0w=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=nMqbCWR1oJ7zNJ5EL21ieLSLByk1tkveDQ4YnEsw9MN00vu6vJ2IpAJ78GclUBPvv bdLqaWhP6vfboAoPpPRnZyiUr8Z25IHdhN0Zrpus5BB0M9Ik0Ac++eQPeF+mw86Z8h uimlYdDC2N0rMEejA1D7oIhagz1J7Ljlj+z4Fhpk= 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.129.124]) by sourceware.org (Postfix) with ESMTPS id 09446383F0A6 for ; Thu, 15 Dec 2022 00:01:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 09446383F0A6 Received: from mail-oa1-f71.google.com (mail-oa1-f71.google.com [209.85.160.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-583-hnE5ehB3PMeBJrcRrvdIlQ-1; Wed, 14 Dec 2022 19:01:49 -0500 X-MC-Unique: hnE5ehB3PMeBJrcRrvdIlQ-1 Received: by mail-oa1-f71.google.com with SMTP id 586e51a60fabf-1437fb9949bso6147419fac.5 for ; Wed, 14 Dec 2022 16:01:49 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=oBR7UG3xPatWhDZJhkIdUlB2JeqC9+TlfwE9VGr8I0w=; b=RpqseLrcAVXL4/l23JokhLd2yypNDEDGPxrZLp6YEoB6xh/cTQM7DdV69Ry+sPoIh3 fBiRhhj6yIZ4UySX8ErShHjsDSp9M0mAftqcql1TWw8aM/aVenUr4YFmOlgjUndn5Ja4 /n6iYWA3K7Hq+XF+kc+cssT95BwJzeQvrmqp+4qhRqwZSr8MVPYpfhKo3RUw2U/jJ44J pziwDC/LKI+CF7mZuczZmBODnEKWvt1GzzAYi9asWU/qp8Cf9ZqSjLOlXnqy4GVnrasq yLw2ra+okI6cxnS8c90R9mRiG3fu0Xd15JEbKoVL73hIcWF8jRz0Dkgcs+TBOzHSfeeP G4zg== X-Gm-Message-State: ANoB5pkMilL64nFbESfuBF9KOq2daTf9PnFyJsUBzq70SIi1cRAS6yPV kzm3d4ELIvJI6tRlteolWaeXuTlU21YIAewzVJImcFyiHtFVJ59h9ONjUtGzulid1uk8pj+XDgH FEZVMG1yShb9NjvcXyMyEw6F+kQBfPd3hrNf9lY8gOA1zt5lOFIQua8giw37XQIpl/i4= X-Received: by 2002:a05:6870:fd90:b0:148:1bb0:4a with SMTP id ma16-20020a056870fd9000b001481bb0004amr11092013oab.53.1671062508393; Wed, 14 Dec 2022 16:01:48 -0800 (PST) X-Received: by 2002:a05:6870:fd90:b0:148:1bb0:4a with SMTP id ma16-20020a056870fd9000b001481bb0004amr11091991oab.53.1671062507999; Wed, 14 Dec 2022 16:01:47 -0800 (PST) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id f1-20020a05620a280100b006ff8ac9acfdsm9035691qkp.49.2022.12.14.16.01.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 16:01:47 -0800 (PST) To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, Patrick Palka Subject: [PATCH] c++: partial ordering with memfn pointer cst [PR108104] Date: Wed, 14 Dec 2022 19:01:45 -0500 Message-Id: <20221215000145.2381507-1-ppalka@redhat.com> X-Mailer: git-send-email 2.39.0.56.g57e2c6ebbe MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.7 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_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, 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 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: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752236104962383387?= X-GMAIL-MSGID: =?utf-8?q?1752236104962383387?= Here we're triggering an overzealous assert in unify during partial ordering since the member function pointer constants are represented as ordinary CONSTRUCTORs (with TYPE_PTRMEMFUNC_P TREE_TYPE) but the assert expects only COMPOUND_LITERAL_P constructors. Bootstrapped and regtested on x86_64-pc-linux, does this look OK for trunk and perhaps 12? PR c++/108104 gcc/cp/ChangeLog: * pt.cc (unify) : Relax assert to accept any CONSTRUCTOR not just COMPOUND_LITERAL_P ones. gcc/testsuite/ChangeLog: * g++.dg/template/ptrmem33.C: New test. --- gcc/cp/pt.cc | 2 +- gcc/testsuite/g++.dg/template/ptrmem33.C | 30 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/ptrmem33.C diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 2f0f7a39698..44058d30799 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -24921,7 +24921,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict, if (is_overloaded_fn (parm) || type_unknown_p (parm)) return unify_success (explain_p); gcc_assert (EXPR_P (parm) - || COMPOUND_LITERAL_P (parm) + || TREE_CODE (parm) == CONSTRUCTOR || TREE_CODE (parm) == TRAIT_EXPR); expr: /* We must be looking at an expression. This can happen with diff --git a/gcc/testsuite/g++.dg/template/ptrmem33.C b/gcc/testsuite/g++.dg/template/ptrmem33.C new file mode 100644 index 00000000000..dca741ae5e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ptrmem33.C @@ -0,0 +1,30 @@ +// PR c++/108104 +// { dg-do compile { target c++11 } } + +struct A { + void x(); + void y(); +}; + +enum State { On }; + +template +struct B { + static void f(); +}; + +template +struct B { + static void g(); +}; + +template +struct B { + static void h(); +}; + +int main() { + B::f(); + B::g(); + B::h(); +}