From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by sourceware.org (Postfix) with ESMTP id C72993838037; Thu, 22 Jul 2021 23:18:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C72993838037 Received: by sf.home (Postfix, from userid 1000) id 886DD42CC454; Fri, 23 Jul 2021 00:15:30 +0100 (BST) From: Sergei Trofimovich To: gcc-patches@gcc.gnu.org Cc: Martin Sebor , Jason Merrill , Sergei Trofimovich Subject: [PATCH] c++: suppress all warnings on memper pointers to work around dICE [PR101219] Date: Fri, 23 Jul 2021 00:15:24 +0100 Message-Id: <20210722231524.2045951-1-slyfox@gentoo.org> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, 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, 22 Jul 2021 23:18:38 -0000 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. 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. --- 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; +} -- 2.32.0