From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id EBACA393BC1C for ; Thu, 29 Jul 2021 15:41:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EBACA393BC1C Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-332-4mD0QSy5McO7LTSIXa58Aw-1; Thu, 29 Jul 2021 11:41:42 -0400 X-MC-Unique: 4mD0QSy5McO7LTSIXa58Aw-1 Received: by mail-qk1-f200.google.com with SMTP id h5-20020a05620a0525b02903b861bec838so4027062qkh.7 for ; Thu, 29 Jul 2021 08:41:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=l7MveuTDuyMiDr8w8gccmZffJOCfa5i1TSkrNh+54fM=; b=PF5ZkPhkSTVpqYfxuvN5AcGyZlSrQ+S9ZpX0VqBOuUn7RCNDk7D5qwzjmK0nMn99Ec 0rlXtb9kgNVRqhArD4VAjl6SV3FJ2F1tdBrj057Izgc8HtWFfcnPR3lIcE8HKVrGSktF 9a6uT1qo9mu3rhKOKlzVVcu7Jhu7Wv03B8ouVaUWo/hv+VNNCskRUHbCIWVDQ1VbOcGS chXvQGq6S1VTyrK7/3C39PQWXKSVg7Roz4T4zYHvVtqBsUv/JDbxdEstzLWiLa9uJgqB 8SAa9Gd1OUSdug50zDm4JRqFZ5SAk84mLdtlRbgwDyflV/sJ47F5/xnoPLMXHmSKOlPZ d04A== X-Gm-Message-State: AOAM530OgqK0dmDsUd6NjHNu09yTK+KfhSDnCem1FdgB9ah5ukNl9ks8 R/2DqbLA1UDBAeQ8SP5o0XvLBdPntHHsPY6GvpXY3KvcRE70We1Dd6pwSz8myz4pS1N+sQo86j3 CUKRnd/6tb8Fwj5UYUw== X-Received: by 2002:a05:620a:f03:: with SMTP id v3mr5920763qkl.96.1627573301880; Thu, 29 Jul 2021 08:41:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw1tbL1vmLR79lqLQeGTB4HIvYuhbSiK2HD9UuwMvHR+5bOsTW5o2olg8CjfQvW+LyHTpGypw== X-Received: by 2002:a05:620a:f03:: with SMTP id v3mr5920741qkl.96.1627573301663; Thu, 29 Jul 2021 08:41:41 -0700 (PDT) Received: from [192.168.1.148] (130-44-159-43.s11817.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id s3sm1893295qke.85.2021.07.29.08.41.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 Jul 2021 08:41:40 -0700 (PDT) Subject: Re: [PATCH] c++: suppress all warnings on memper pointers to work around dICE [PR101219] To: Sergei Trofimovich , gcc-patches@gcc.gnu.org Cc: Martin Sebor , Sergei Trofimovich References: <20210722231524.2045951-1-slyfox@gentoo.org> From: Jason Merrill Message-ID: <67b15096-25fd-bf23-0be2-57af76462166@redhat.com> Date: Thu, 29 Jul 2021 11:41:39 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210722231524.2045951-1-slyfox@gentoo.org> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP 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-List-Received-Date: Thu, 29 Jul 2021 15:41:45 -0000 On 7/22/21 7:15 PM, Sergei Trofimovich wrote: > From: Sergei Trofimovich > > r12-1804 ("cp: add support for per-location warning groups.") among other > things removed warning suppression from a few places including ptrmemfuncs. > > Currently ptrmemfuncs don't have valid BINFO attached which causes ICEs > in access checks: > > crash_signal > gcc/toplev.c:328 > perform_or_defer_access_check(tree_node*, tree_node*, tree_node*, int, access_failure_info*) > gcc/cp/semantics.c:490 > finish_non_static_data_member(tree_node*, tree_node*, tree_node*) > gcc/cp/semantics.c:2208 > ... > > The change suppresses warnings again until we provide BINFOs for ptrmemfuncs. We don't need BINFOs for PMFs, we need to avoid paths that expect them. It looks like the problem is with tsubst_copy_and_build calling finish_non_static_data_member instead of build_ptrmemfunc_access_expr. > PR c++/101219 > > gcc/cp/ChangeLog: > > * typeck.c (build_ptrmemfunc_access_expr): Suppress all warnings > to avoid ICE. > > gcc/testsuite/ChangeLog: > > * g++.dg/torture/pr101219.C: New test. This doesn't need to be in torture; it has nothing to do with optimization. > --- > gcc/cp/typeck.c | 6 +++++- > gcc/testsuite/g++.dg/torture/pr101219.C | 10 ++++++++++ > 2 files changed, 15 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/torture/pr101219.C > > diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c > index a483e1f988d..aa91fd21c7b 100644 > --- a/gcc/cp/typeck.c > +++ b/gcc/cp/typeck.c > @@ -3326,7 +3326,11 @@ build_ptrmemfunc_access_expr (tree ptrmem, tree member_name) > member = DECL_CHAIN (member)) > if (DECL_NAME (member) == member_name) > break; > - return build_simple_component_ref (ptrmem, member); > + tree r = build_simple_component_ref (ptrmem, member); > + /* Suppress warning to avoid exposing missing BINFO for ptrmem > + synthetic structs: PR101219. */ > + suppress_warning(r); > + return r; > } > > /* Given an expression PTR for a pointer, return an expression > diff --git a/gcc/testsuite/g++.dg/torture/pr101219.C b/gcc/testsuite/g++.dg/torture/pr101219.C > new file mode 100644 > index 00000000000..c8d30448187 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/torture/pr101219.C > @@ -0,0 +1,10 @@ > +/* { dg-do compile } */ > +/* { dg-additional-options "-Wall" } */ > +struct S { void m(); }; > + > +template bool f() { > + /* In PR101219 gcc used to ICE in warning code. */ > + void (S::*mp)(); > + > + return &S::m == mp; > +} >